{"id":28579025,"url":"https://github.com/dotnet-campus/encodingnormalior","last_synced_at":"2025-06-11T01:37:53.216Z","repository":{"id":38088145,"uuid":"78485400","full_name":"dotnet-campus/EncodingNormalior","owner":"dotnet-campus","description":"规范化文件编码。Make the file's encoding standard.","archived":false,"fork":false,"pushed_at":"2024-11-21T10:05:09.000Z","size":344,"stargazers_count":64,"open_issues_count":7,"forks_count":17,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-03T14:29:15.573Z","etag":null,"topics":["dotnet","dotnet-tool","encoding","text-encoding","tool","visual-studio-extension","visualstudio"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotnet-campus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-10T01:26:12.000Z","updated_at":"2025-05-20T01:05:47.000Z","dependencies_parsed_at":"2024-11-21T13:00:50.840Z","dependency_job_id":null,"html_url":"https://github.com/dotnet-campus/EncodingNormalior","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FEncodingNormalior","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FEncodingNormalior/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FEncodingNormalior/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FEncodingNormalior/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotnet-campus","download_url":"https://codeload.github.com/dotnet-campus/EncodingNormalior/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FEncodingNormalior/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259182418,"owners_count":22818105,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","dotnet-tool","encoding","text-encoding","tool","visual-studio-extension","visualstudio"],"created_at":"2025-06-11T01:37:51.184Z","updated_at":"2025-06-11T01:37:53.202Z","avatar_url":"https://github.com/dotnet-campus.png","language":"C#","readme":"# 编码检测和修改工具\n\n| Appveyor Build | GitHub Action |\n| -- | -- |\n|[![Build status](https://ci.appveyor.com/api/projects/status/ypcqbbc7bsexnfog?svg=true)](https://ci.appveyor.com/project/lindexi_gd/encodingnormalior)| ![](https://github.com/dotnet-campus/EncodingNormalior/workflows/.NET%20Core/badge.svg) |\n\n| Package Name                   | Release (NuGet) | \n|--------------------------------|-----------------|\n|  `dotnetCampus.EncodingNormalior`       |[![NuGet](https://img.shields.io/nuget/v/dotnetCampus.EncodingNormalior.svg)](https://www.nuget.org/packages/dotnetCampus.EncodingNormalior/)|\n|  `lindexi.src.EncodingUtf8AndGBKDifferentiater`      |[![NuGet](https://img.shields.io/nuget/v/lindexi.src.EncodingUtf8AndGBKDifferentiater.svg)](https://www.nuget.org/packages/lindexi.src.EncodingUtf8AndGBKDifferentiater/)|\n\n在开发中经常遇到编码不一致的文件，而如果这些文件包含需要显示的字符串，就会导致在乱码。所以需要一个工具可以自动检测工程、文件夹内所有文本的编码，并可以规范所有文件编码。\n\n工具要求可以设置规定的编码，如果文件的编码不是规定的编码，用户可以选择把文件的编码转换为规定的编码。\n\n用户可以设置白名单，白名单可以让某些文件或文件夹的文件不检测。\n\n默认是检测所有的文本文件，但是因为没有一个好的算法，所以在无法判断一个文件是文本时，会去查看用户是不是设置了一定包含某个文件后缀，一旦文件在用户的包含后缀中，那么就会去检测文件编码。\n\n程序首先是检查文件是否在白名单，如果不在，再检测是否包含文件后缀，如果没有，再检测文件是否是文本，如果是的话，就检查。\n\n\u003c!--more--\u003e\n\n\n\n首先是告诉大家如何使用工具。\n\n## 工具的使用\n\n### 命令行使用\n\n命令行使用参见：[编码工具——命令行](./EncodingNormalior/README.md)\n\n### 插件使用\n\n首先是下载插件，插件可以到 [https://visualstudiogallery.msdn.microsoft.com/a5f50c64-1b75-4f7a-97fd-9545747c506a](https://marketplace.visualstudio.com/items?itemName=lindexigd.vs-extension-18109) 下载，也可以在 [VS 插件网](https://marketplace.visualstudio.com/vs) 搜索 `Encoding` 就可以找到我的工具啦。可以说我翻遍了整个插件网，都没有找到我这个功能的插件（这句话是在2017年说的），但是还是找到了一些有用的插件。\n\n![](http://cdn.lindexi.site/8f464be7-2358-45f4-b6cd-eae32c47a878201727162028.jpg)\n\n打开 Visual Sutido ，在安装完 [编码规范工具](https://marketplace.visualstudio.com/items?itemName=lindexigd.vs-extension-18109) ，可以看到菜单多了 选项 EncodingNormalizer\n\n![](http://cdn.lindexi.site/lindexi%2F2019461567484)\n\n然后来说下我做的功能。\n\n#### 修改当前文件编码\n\n在 2.6 版本新添加的功能是修改当前打开的文件的编码，即使这个文件不在当前的项目里面\n\n因为现在没有一个方法可以知道一个文件是什么编码，所以可以在插件自己手动选当前文件的编码，这样可以解决识别编码错误\n\n![](http://cdn.lindexi.site/lindexi%2F202022911598327.jpg)\n\n选择当前的文件的编码，和需要转换的文件的编码，然后点击 Convert 就可以转换了\n\n\u003c!-- ![](image/VisualStudio 编码规范工具 2.6 修改当前文件编码/VisualStudio 编码规范工具 2.6 修改当前文件编码5.png) --\u003e\n\n![](http://cdn.lindexi.site/lindexi%2F201946153140370)\n\n现在能支持的转换的编码是带符号的 Utf-8 和 GBK 编码\n\n#### 设置\n\n点击菜单 EncodingNormailzer ，选择 Setting 可以看到下面界面\n\n\u003c!-- ![](image/VisualStudio 编码规范工具 2.6 修改当前文件编码/VisualStudio 编码规范工具 2.6 修改当前文件编码1.png) --\u003e\n\n![](http://cdn.lindexi.site/lindexi%2F201946151729613)\n\n首先是可以忽略一些文件或文件夹，默认是忽略一些不是文本的文件和 bin、obj、git文件夹，注意，千万不要去转换 git 文件夹的代码。\n\n然后我们可以设置编码，现在做的是 Utf8 、GBK、Unicode的编码，如果检测工程存在文件的编码和我们设置的不一样，就会提示去转换。\n\n因为 Ascii 的文件，存放为 GBK 和 UTF8不带签名是无法区分的，所以忽略 ASCII 编码文件。\n\n因为对 Unicode-16 的文件是无法使用判断存在 '\\0' 来区分文件是不是文本，所以，对于某些文件还是自己手动添加是否一定检测，对于没有被添加到一定需要检测的文件，先判断他是不是文本，如果是的话，就检测。\n\n设置保存在 `我的文档\\EncodingNormalizer\\Account.json` 文件\n\n#### 检查编码\n\n然后在打开完工程，注意要加载完成才使用。\n\n点击 Conform solution encoding ，自动检测方案所有工程的文件编码，如果发现所有的编码都符合规范，那么弹出窗口说所有文件都符合规范。如果有文件不符合规范，那么提示用户是否转换。\n\n\n\u003c!-- ![](image/VisualStudio 编码规范工具 2.6 修改当前文件编码/VisualStudio 编码规范工具 2.6 修改当前文件编码2.png) --\u003e\n\n![](http://cdn.lindexi.site/lindexi%2F201946151823827)\n\n找到所有不符合规范的文件，可以一键点击转换\n\n![](http://cdn.lindexi.site/lindexi%2F20194615184676)\n\n\u003c!-- ![](image/VisualStudio 编码规范工具 2.6 修改当前文件编码/VisualStudio 编码规范工具 2.6 修改当前文件编码3.png) --\u003e\n\n## 和我组队做工具\n\n这个工具相信是大家比较需要的，所以我就做了这个工具。做这个工具最难的地方在于判断文件编码，和如何做vs扩展两个。如果大家也想做一个差不多的东西，可以参见开发过程中使用的技术：[C＃ 判断文件编码](https://blog.lindexi.com/post/C-%E5%88%A4%E6%96%AD%E6%96%87%E4%BB%B6%E7%BC%96%E7%A0%81.html )  [VisualStudio 扩展开发](https://blog.lindexi.com/post/VisualStudio-%E6%89%A9%E5%B1%95%E5%BC%80%E5%8F%91.html )\n\n我把工具放在 github ： [https://github.com/dotnet-campus/EncodingNormalior](https://github.com/dotnet-campus/EncodingNormalior)\n\n好像我的项目名称 编码规范工具 是 EncodingNormalizer ，写错了，但是不想改。\n\n我还把他放在 vs 扩展库，可以到 [https://marketplace.visualstudio.com/](https://marketplace.visualstudio.com/) 下载。\n\n来说下如何使用我的项目：\n\n我的项目有类库 EncodingNormalior 和插件 EncodingNormalizerVsx。\n\n如果想运行类库，不需要做任何修改。如果想运行插件，需要修改属性-\u003e调试，使用外部程序，里面写`C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\devenv.exe` 我现在是 VisualStudio 2015 所以是在`Visual Studio 14.0`\n\n然后修改命令行参数:`/rootsuffix Exp`\n\n然后就可以运行。\n\n\u003c!-- 现在发在VS插件网站，可以在 下载 --\u003e\n\n如果希望开发这个项目，可以去fork我的github库。\n\n如果现在使用的是 visualStudio 2017 企业版，那么把外部程序修改为`C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\devenv.exe`\n\n现在使用 VisualStudio 2019 社区版，将外部程序修改为 `C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\IDE\\devenv.exe`\n\n\u003c!-- \n\n如果本地存在 textFileSuffix.txt 那么读取配置，哪些符合后缀名的文件要判断编码。如果本地不存在，使用默认配置。读取的值放在 IncludeFileSetting.TextFileSuffix \n\n如果本地存在 includeFile.txt ，那么读取配置，哪些文件是要判断编码，支持通配。如果本地不存在，使用默认配置。 读取的值放在  IncludeFileSetting.TextFileSuffix\n\n如果本地存在 WhiteList.txt ，那么读取配置，哪些文件是忽略的。如果本地不存在，使用默认配置。读取的值放在 InspectFileWhiteListSetting.DefaultWhiteList \n\n白名单可以忽略文件夹，文件夹不能使用通配。如果本地不存在，使用默认配置。\n\n因为用到命令行，于是解析命令行使用的是 http://www.cnblogs.com/linxuanchen/p/c-sharp-command-line-argument-parser.html 大神写的方法。 --\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet-campus%2Fencodingnormalior","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotnet-campus%2Fencodingnormalior","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet-campus%2Fencodingnormalior/lists"}