拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Visual Studio 2026中文乱码终极排查指南:从编码链路到修复方案

Visual Studio 2026中文乱码终极排查指南:从编码链路到修复方案 1. 乱码的“案发现场”两类表现与一套根因模型先说结论中文乱码这个问题在 Visual Studio 2026 里看起来是新版本的新问题实际上它是一套“老三样”的变体。我这次是在一台刚装好 VS 2026 预览版的 Windows 机器上复现的——新建控制台项目写了几行printf(中文测试)F5 一跑控制台里全是问号和方块再回头看代码编辑器中文注释倒是正常但字符串字面量复制到其他工具里又变了形。最让我头疼的是有时候同样的代码同一台机器上午跑是正常的下午就乱了中间只动过一个无关紧要的头文件。这嗅觉让我第一时间意识到问题根本不在“2026 版本变了”而在三层编码链路里有一环掉链子了。1.1 编辑区乱码与运行输出乱码别看错了方向大多数人遇到中文乱码第一反应是去改“语言”或“区域设置”改完发现没用又去重装中文语言包还是没用。这是因为 Visual Studio 2026 本身是一个多语言 IDE界面语言和代码编码是两套完全独立的机制。前者只影响菜单、按钮、提示文字的显示语言后者才决定你源码里的中文字符能不能被正确保存、读取、编译和输出。编辑区出现乱码本质是同一个文件被不同的编码解释器读过。例如一个用 UTF-8 保存的文件被按 GBK代码页 936打开中文就会显示成“鐎垫牳”这种毫无逻辑的字符组合反过来一个 GBK 文件被按 UTF-8 读取中文会显示成“浣犲ソ”这种乱码。运行输出乱码就完全是另外一回事了代码文件编码正确、编译也没报错但程序运行时输出的中文变成“???”或者变成一行行方块。这通常不是编译器读错了源码而是程序写入控制台的字节流与 Windows 控制台当前的活动代码页不匹配。我见过最典型的误判是把编辑区乱码和输出乱码混在一起处理。比如有人发现代码编辑器里中文正常但printf输出乱码于是跑去把系统区域改成“Beta使用 Unicode UTF-8 提供全球语言支持”结果整个系统里存量为 GBK 的老文件全部跟着遭殃部门群里瞬间炸锅。所以动手之前先冷静判断你的乱码发生在哪一层编辑区、编译过程中还是运行输出阶段三者对应的修复手段完全不同搞错方向等于白忙。1.2 三层编码模型源文件、编译器和输出端各管一段我把这个问题总结成三层模型以后你遇到任何 IDE 的乱码都可以先套这个模型定位第一层源文件保存编码。也就是.cpp、.h、.cs等文件在磁盘上的字节形式。Windows 中文环境下老项目常用 ANSI即 GBK新项目或跨平台项目常用 UTF-8带 BOM 或不带 BOM。这一层决定了 Visual Studio 打开文件时“按什么规则解码”。第二层编译器对源代码的解析编码和执行字符集。MSVC 编译器读取源文件时如果文件没有 BOM它默认按当前系统代码页中文系统下是 936 / GBK去解析如果文件带 UTF-8 BOM则能明确识别为 UTF-8。同时printf(中文)里的字符串字面量会被转换成执行字符集之后写入二进制文件。执行字符集默认也是系统代码页除非你用/utf-8或/execution-charset:utf-8明确指定。第三层运行时输出端编码。控制台、终端、调试器监视窗口、日志文件各有各的显示编码。Windows 控制台默认的活动代码页通常是 936GBK如果程序往控制台吐的是 UTF-8 字节流而控制台按 GBK 解码自然就乱。三层全部对齐中文才不会乱。任何一层掉链子都会以“乱码”的形式宣告存在。你甚至可以这么理解编码就像三把锁你需要三把对应的钥匙少一把都打不开门。Visual Studio 2026 的乱码问题99% 都是这个模型里某层配置不对而不是版本本身的缺陷。2. 从症状逆推病根一次完整排查链路比起直接给修复方案我更想先把排查过程写清楚。因为你以后遇到的未必是“Visual Studio 2026 控制台项目”这么标准的场景可能是某个老旧 MFC 工程、可能是 CMake 生成的工程、也可能是刚接手别人留下的“能跑但乱码”的项目。学会逆推比背答案重要得多。2.1 复现现场与观察顺序我这次的复现对象是 VS 2026 默认创建的“控制台应用C”代码很简单#include iostream #include cstdio int main() { std::cout 中文字符串输出测试 std::endl; printf(printf 中文测试\n); return 0; }编译没有报错但是运行后控制台显示的是涓枃瀛楃涓茶緭鍑祴璇?? printf 涓枃娴嬭瘯这个信息量其实非常大。涓枃瀛楃是典型的一类乱码——UTF-8 字节被 GBK 解码后产生的“变形记”。而第二行末尾出现??说明还有一部分中文字符在转换过程中变成了问号。如果你看到的乱码全是问号那通常是字符在编码转换时找不到对应映射信息已经丢失了一部分。我的排查顺序是固定的你直接抄就行先看编辑区中文正不正常。正常说明第一层源文件编码大概率没问题或者 VS 2026 已经按正确编码打开了文件。再看编译器输出错误列表、生成日志里有没有乱码。如果错误信息里的中文文件名、中文路径、中文警告内容是正常的说明编译器和文件系统交互正常问题更可能集中在运行阶段。最后看运行控制台的乱码形态。方块、问号、还是“涓枃”类型每种形态对应的原因都有差异。检查当前控制台代码页。新建一个控制台窗口输入chcp如果显示936说明当前活动代码页是 GBK如果显示65001则是 UTF-8。这一步能帮你判断是不是第三层掉链子。2.2 三步定位法与常见干扰项根据上面的观察我做了三次定位实验。第一次修改程序直接输出字节值。const char* s 中文; for (size_t i 0; i strlen(s); i) { printf(%02X , (unsigned char)s[i]); } printf(\n);如果输出的字节序列是E4 B8 AD E6 96 87这是“中文”两个字的 UTF-8 编码如果是D6 D0 CE C4则是 GBK 编码。这一步直接锁定了源代码里的字符串字面量在编译后变成了什么编码。实测结果是E4 B8 AD E6 96 87说明编译器已经把源文件当作 UTF-8 处理并且执行字符集也是 UTF-8。那么问题几乎可以肯定出在第三层控制台拿着 GBK 的代码页去翻译 UTF-8 的字节流不出乱码才怪。第二次在程序入口加一句话把控制台代码页切到 65001。SetConsoleOutputCP(65001);再跑一次输出正常了。到这里链路已经很清晰源文件 UTF-8 - 编译器按 UTF-8 编译 - 程序输出 UTF-8 字节 - 控制台原本按 GBK 解码 - 乱码加上SetConsoleOutputCP(65001)之后控制台解码规则变成 UTF-8就对齐了。第三次我准备了一个“更阴间”的实验。用一个记事本把.cpp文件另存为“ANSI”编码然后再用 VS 2026 打开。这个时候编辑区直接乱成一片而且标题栏没有任何提示。如果你之前没接触过这个场景会误以为项目文件损坏了。其实只是 VS 2026 默认按 UTF-8 试开失败后退回到了系统代码页但你的文件是 GBK两个规则不一致导致的显示异常。2.3 乱码“长相”对照表这里我整理了一份乱码形态对照表可以当作“快速诊断卡”使用乱码表现典型原因快速验证方法编辑区显示“浣犲ソ”UTF-8 文件被按 GBK 打开用“文件 - 另存为”看当前编码或把文件拖进现代浏览器看是否正常编辑区显示“鐎垫牳”GBK 文件被按 UTF-8 打开在 VS 里切换“使用 UTF-8 编码保存”后重启运行输出全是???字符串在转换链中丢失信息或执行字符集与输出端不匹配输出十六进制字节序列检查是否为 E3/EF 开头等无映射字节运行输出是“涓枃”UTF-8 字节被 GBK 控制台解码chcp看代码页SetConsoleOutputCP(65001)验证运行输出是方块字体不支持对应字形或代码页完全错位换“等线”或“新宋体”字体再试切代码页再试编译错误信息里中文文件名乱码操作系统区域设置与 MSBuild 编码不一致检查系统区域把非 ASCII 路径改成英文路径验证调试监视窗口里中文字符串显示成{...}或数字数组监视器按宽字符显示把 UTF-8 字节当成单字节字符处理了切换调试器字符显示模式或在监视窗口强制类型转换我自己调试时最依赖的一招还是“输出字节 查表”。不要凭肉眼猜编码直接把字节打出来查一下十六进制对应区间就能确定是 UTF-8、GBK还是别的什么。这一步做好了后续修复就是按图索骥。3. Visual Studio 2026正式修复三处关键设置位置现在进入实操阶段。无论你是用 VS 2026 的 GUI 界面还是通过 CMake / MSBuild 命令行构建下面三处设置是解决乱码的“黄金三角”。3.1 源文件保存高级保存选项里的隐藏能力Visual Studio 2026 延续了之前版本里的“高级保存选项”功能但默认情况下这个功能藏在菜单里不手动调出来你可能根本找不到。调出方法有两种菜单路径文件 - 另存为 - 点击“保存”按钮左侧的下拉箭头 - 选择“编码保存”。直接设置工具 - 自定义 - 命令 - 菜单栏 - 文件 - 添加命令找到“高级保存选项”然后以后每次都能在“文件”菜单里直接看到。进入高级保存选项后你会看到两个关键下拉框一个是“编码”一个是“行尾”。编码这里我强烈建议选择“Unicode (UTF-8 带签名) - 代码页 65001”也就是带 BOM 的 UTF-8。虽然“不带 BOM 的 UTF-8”更符合 Linux 下的习惯但在 Windows 生态里带 BOM 有一个先天的优点MSVC 编译器看到 BOM 就明确知道这是 UTF-8 文件不需要任何额外参数就能正确解析中文。新项目我全部用“UTF-8 带签名”保存旧项目如果历史包袱太重就用后面的/utf-8编译参数两种思路都能走通。另外还有一个小细节Visual Studio 2026 打开一个“不带 BOM 的 UTF-8”文件时它会尝试做智能检测。如果文件里混有 GBK 编码的中文注释自动检测可能会猜错导致编辑区乱码。遇到这种情况最简单的办法是通过“文件-另存为-编码保存”手动指定一次把文件统一成带 BOM 的 UTF-8一劳永逸。3.2 编译器入口/utf-8 与项目属性如果你不想逐个文件去设置保存编码尤其是接手一个大型老项目时最省力的做法是在编译器层面统一指定编码规则。在 Visual Studio 2026 的解决方案资源管理器里右键项目名称选择“属性”依次找到配置属性 - C/C - 命令行 - 附加选项在附加选项里加一行/utf-8/utf-8这个参数是 MSVC 的一个组合开关等价于同时指定了/source-charset:utf-8和/execution-charset:utf-8。也就是说无论源文件里是否带 BOM编译器都会按 UTF-8 解析源代码编译生成的字符串字面量也会按 UTF-8 写入可执行文件。这一招对处理“旧项目 新编译器”的乱码问题特别有效因为你不必把每个.cpp文件都另存为 UTF-8只要编译器愿意按 UTF-8 读文件里的中文就不再会被误判成 GBK。当然命令行构建的项目也逃不开这一课。用 CMake 的话可以直接在CMakeLists.txt里加add_compile_options(/utf-8)或者更细粒度地add_compile_options($$C_COMPILER_ID:MSVC:/utf-8) add_compile_options($$CXX_COMPILER_ID:MSVC:/utf-8)这样可以确保 Visual Studio 2026 生成的 CMake 工程和命令行cmake --build保持同样的编码参数。3.3 控制台端让 printf 输出不被终端“二次污染”程序跑起来输出到了控制台这时的乱码已经和编译器无关了。如果你用的是 Visual Studio 自带的调试控制台它默认继承操作系统的代码页绝大多数中文系统是 936。即便你的程序输出的是 UTF-8 字节流控制台也会按 GBK 去解读看起来自然就是“涓枃”。最直接的修复是在程序入口处明确设置控制台输出代码页#ifdef _WIN32 #include windows.h #endif int main() { #ifdef _WIN32 SetConsoleOutputCP(65001); SetConsoleCP(65001); #endif // ... }SetConsoleOutputCP(65001)是设置控制台输出代码页SetConsoleCP(65001)是设置控制台输入代码页两者最好都设置否则你用中文输入时也可能出问题。但如果你不想改代码也可以临时在控制台窗口里手动执行chcp 65001再运行你的程序。不过这种方式只对当前终端窗口有效换个窗口就失效了。所以我的习惯是把SetConsoleOutputCP写进程序里并且用宏包住保证在 Windows 下生效在 Linux 下不影响编译。还有一个容易忽略的细节Visual Studio 2026 的调试控制台与普通 Windows Terminal 的渲染逻辑略有不同。如果你开了 Windows Terminal它自带的 UTF-8 支持比旧版conhost好很多但前提是代码页仍要匹配。在 Windows Terminal 的配置文件里设置启动参数startingDirectory和tabColor之类并不能改变代码页真正改变代码页的依旧是chcp命令或程序 API。所以别被终端外观迷惑一切以实际代码页为准。4. 不同场景的修复对照从编辑器到命令行再到Git很多人以为乱码只存在于“运行程序”这个环节实际上它会在 Visual Studio 2026 的多个位置轮番登场编辑器、错误列表、输出面板、调试监视窗口、Git 差异视图。我整理了一张场景对照表每个场景的修复入口都不同照着操作基本能解决九成问题。4.1 场景化对照表场景乱码位置首选修复备选修复打开文件时编辑区乱码代码窗口高级保存选项中重新指定编码为 UTF-8在“工具 - 选项 - 环境 - 文档”里调整“保存时使用自动编码检测”项目文件多且零散多个.cpp/.h用 VS 2026 的“文件 - 另存为 - 编码保存”逐个转换用 PowerShell 脚本批量转存为 UTF-8带BOM编译告警/错误信息里的中文路径乱码错误列表、输出面板把项目路径改成英文路径验证是否为路径问题检查系统区域设置不要随意开启 Beta UTF-8运行控制台输出乱码控制台窗口程序内SetConsoleOutputCP(65001)在终端执行chcp 65001调试监视窗口里字符串变量显示乱码监视窗口在“选项 - 调试 - 常规”里关闭“使用本机兼容模式”后重试在监视窗口输入变量名,s强制按字符串显示Git 差异视图中文乱码Git 比较窗口在Git - 设置 - 差异显示中指定编码为 UTF-8在仓库根目录配置.gitattributes强制*.cpp text eollf working-tree-encodingUTF-8MSBuild 日志中文乱码“生成”输出窗口在项目属性里加/utf-8检查Console字体是否支持中文其中有两个场景我要单独展开说因为它们最容易让人误判。4.2 MSBuild输出、编译器报错、调试监视窗口的乱码处理MSBuild 输出窗口里的乱码很多时候和源码本身无关而是 MSBuild 进程在输出日志时用了系统代码页。你在 VS 2026 的“输出”窗口中看到中文路径变成乱码先不要急着改项目直接在命令行里跑一次msbuild /version或者dotnet build看看同样的中文路径是否正常。如果命令行下正常、VS 里不正常那大概率是 VS 的日志面板渲染编码不够聪明。你可以把输出面板里的文字复制到记事本里用“另存为”的编码选项看一遍原始字节基本就能判断。还有编译器报错里的中文。比如你写了一个带中文文件名的头文件编译报错时错误列表里显示的是乱码路径不仔细看会以为项目结构哪里崩了。这时候最稳妥的做法是在tools - Options - Environment - Documents里检查“保存文档时使用 Unicode”有关的选项再把/utf-8加进 C/C 命令行。这两步做完大多数路径乱码就消失了。调试监视窗口的乱码则更容易踩坑。你在监视窗口里看一个std::string变量VS 默认会尝试按宽字符显示但std::string存的是窄字节UTF-8 或 GBK此时监视窗口很容易显示成{...}或者一堆数字数组。不要慌在监视窗口的“值”列手动追加,s后缀例如输入str,s调试器就会按字符串格式显示。如果再乱说明压缩的字节和你期望的编码不一致你就把它当作一个编码疑问来检查把变量的十六进制字节拷出来和任意在线编码工具比对一下即可。4.3 为什么Git也来添乱Git 在 Windows 上乱码通常有两个原因一是仓库里的文件本身是 GBK 编码二是 Git 自身配置了不正确的i18n.commitEncoding或core.quotepath。Visual Studio 2026 内置了 Git 工具自动生成的.gitattributes如果包含类似*.cpp text的规则Git 会在入库时按 UTF-8 规范化行尾和编码。但如果你接手的老项目一直用 GBK 提交那么git diff视图里必然出现乱码。最有效的处理方式是强制告诉 Git这个项目里的源码是 UTF-8。你需要在仓库根目录创建或修改.gitattributes*.cpp text eolcrlf working-tree-encodingUTF-8 *.h text eolcrlf working-tree-encodingUTF-8 *.c text eolcrlf working-tree-encodingUTF-8 *.hpp text eolcrlf working-tree-encodingUTF-8然后执行一次git add --renormalize .让 Git 重新按新规则规范化所有文件。注意这一步会把工作区文件改写建议先提交一次再操作避免现场翻车。如果你的 Git 只是显示中文文件名变成\346\265\213\350\257\225.cpp这种八进制转义那是因为core.quotepath默认为 true。执行git config --global core.quotepath false就能让 Git 直接显示中文文件名。这个参数在 Visual Studio 2026 的 Git 工具窗口里也有对应界面入口但直接命令行改最省事。5. 周边工具链乱码真相Qt、VSCode、记事本与终端Visual Studio 的中文乱码问题从来不是孤立的。只要你在 Windows 上做开发Qt Creator、VSCode、Windows 记事本、cmd 终端这些周边工具甚至系统组件都会掺和一脚。而且很多人的乱码其实是“跨工具”造成的在 VS 2026 里写好的 UTF-8 文件拿到 VSCode 里打开如果 VSCode 的files.encoding设置不对立刻就乱给你看。这里我把集中噪声源逐一拆掉。5.1 Qt/C在MSVC下的乱码根源Qt 6.11 配合 Visual Studio 2026 使用的场景最近讨论度不低。Qt 6 默认源码按 UTF-8 处理这对新项目是好事但对老项目却是灾难很多老代码里的字符串字面量是 GBK 的Qt 6 按 UTF-8 解析后全部变成“????”或者乱码。你可能会想“我在字符串前加个QString::fromLocal8Bit不就行了”但问题是如果源码已经被编译器按错误编码读取你在代码里怎么补救都是白搭因为字符串字面量在编译期就已经被破坏了。正确的做法是两件事一起做把源文件统一保存为 UTF-8最好带 BOM因为 MSVC 对无 BOM UTF-8 的识别有时会翻车。在.pro文件里加QMAKE_CXXFLAGS /utf-8如果你是 CMake Qt前面已经说过了add_compile_options(/utf-8)同样适用。Qt 输出到控制台的方式也容易出问题。qDebug()默认输出到 Qt 的调试通道在某些 IDE 里按 UTF-8 显示在旧版 Qt Creator 里却按系统代码页显示。如果你看到qDebug()输出正常、std::cout乱码或者反过来别怀疑自己眼睛纯粹是输出通道对编码的处理不同。5.2 VSCode和Windows终端编码与代码页的“匹配游戏”VSCode 中文乱码最常见的两种情况打开文件时乱码因为 VSCode 默认猜编码如果文件是 GBK而 VSCode 没有正确识别就会按 UTF-8 打开出现“浣犲ソ”。终端里程序输出乱码VSCode 集成终端默认继承 Windows 的代码页但如果你的终端启动时加载了 PowerShell 或某个插件把终端代码页改成了 65001而程序内部仍按 GBK 输出就会乱。我处理 VSCode 乱码的习惯很简单右下角点击当前文件编码“通过编码重新打开”并选择GBK或UTF-8。全局配置里设置files.encoding: utf8, files.autoGuessEncoding: true终端里手动执行chcp 65001或者在settings.json里给终端增加启动参数比如terminal.integrated.profiles.windows: { PowerShell: { source: PowerShell, args: [-NoExit, -Command, chcp 65001] } }不过我更推荐在程序端用SetConsoleOutputCP兜底因为不是每个用户都会去改 VSCode 的终端设置。5.3 Windows记事本与ANSI旧文件Windows 自带记事本在这个问题上这几年变化不小原来默认保存是 ANSI新版默认变成了 UTF-8。好的一面是新保存的文件在大部分现代工具里不会乱坏的一面是历史遗留的 GBK/ANSI 老文件用新版记事本打开时可能直接乱码或者当你“另存为”时没注意编码把原本的 GBK 内容覆盖成了 UTF-8文件彻底反转。如果你手里有一堆老.txt、.log、.cpp文件常见于客户交付的旧系统导出文件批量处理的方式是写一个简单的 PowerShell 脚本把 GBK 转成 UTF-8Get-ChildItem -Path C:\YourFolder -Filter *.txt -Recurse | ForEach-Object { $content [System.IO.File]::ReadAllText($_.FullName, [System.Text.Encoding]::GetEncoding(GB2312)) [System.IO.File]::WriteAllText($_.FullName, $content, [System.Text.Encoding]::UTF8) }这里要特别注意[System.IO.File]::ReadAllText的第二个参数明确指定了源文件的编码你首先要确定老文件真的是 GB2312否则转换结果依然不对。可以用十六进制编辑器抽查前几百字节如果看到类似D6 D0 CE C4的字节基本就是 GBK 系的文件。6. 治本思路把UTF-8定为项目红线排查完一轮又一轮你会发现在 Visual Studio 2026 里乱码问题其实不是“改一两处设置”就完事的真正的治本方案是定规矩——把 UTF-8 作为项目的统一编码然后用工具链强制贯彻。6.1 .editorconfig终于是认真的Visual Studio 2026 对.editorconfig的支持已经非常完善。你可以在项目根目录放一个.editorconfig强制约束所有源码文件的编码root true [*] charset utf-8-bom end_of_line crlf insert_final_newline true trim_trailing_whitespace true [*.{cpp,h,hpp,c,cs}] charset utf-8-bom有了这个文件VS 2026 在保存任何文件时都会尽量按 UTF-8 带 BOM 存。即使某个文件某次被外部工具改成了 GBK你在 VS 里一打开编辑器也会给出提示或直接按.editorconfig的规则修正。当然.editorconfig并不是强制转换已有文件——它主要约束“保存”时的行为所以你已经乱掉的文件还得先用第 3 章的方法转一次。6.2 CMake / 命令行下统一编译参数在 Visual Studio 2026 里用 CMake 打开项目时IDE 会用 CMake 生成的工程模型来编译这时候你写在项目属性里的/utf-8可能不会生效——因为 CMake 的生成器会覆盖一部分命令行参数。所以要在CMakeLists.txt中明确声明。我通常在顶层这样写if(MSVC) add_compile_options(/utf-8) add_definitions(/DUNICODE /D_UNICODE) endif()注意顺序add_compile_options必须在add_executable或add_library之前才能对当前目录及其子目录的所有目标生效。如果你是纯命令行使用cl.exe或msbuild可以直接在环境变量里或每一次命令行中加上/utf-8。例如cl /utf-8 /EHsc main.cpp别小看这一步它能保证你在 CI 流水线上构建出的产物和本地开发时构建出的产物采用完全一致的编码策略。6.3 我的最终检查清单经过几次在 Visual Studio 2026 里和乱码正面交锋我现在接手一个项目会按这个顺序做一遍体检先看.editorconfig是否存在没有就先建一个规定charset utf-8-bom。用文件 - 另存为 - 编码保存确认核心.cpp/.h文件的当前编码。如果发现旧文件是 GBK先备份再用脚本批量转成 UTF-8 带 BOM。检查 CMake 或项目属性里是否已加/utf-8。没有就加。程序入口处main/WinMain加上SetConsoleOutputCP(65001)并确保包含windows.h的代码被#ifdef _WIN32包裹。检查.gitattributes把源文件类型声明为 UTF-8 规范化并执行一次git add --renormalize .。顺手把 Git 的core.quotepath设为 false避免文件名乱码影响心情。如果团队里还有人用 VSCode / Qt Creator 协作开发统一在他们的编辑器配置里锁定files.encoding或源码编码选项。这套检查清单做下来基本能在项目早期就把乱码问题消灭干净。我自己的项目从旧版的 Visual Studio 2019 一直迁到 2026路径上出现过各种奇怪问题但只要这七步执行到位之后很少再看乱码的“表演”。最后再分享一个小技巧如果你有同事突然说“我代码没动怎么就乱码了”十有八九是文件编码被某个工具悄悄改了。这时候你别急着改代码先去“比较文件”功能里看一行字节差异很多时候你会看到整个文件从 UTF-8 被整段转成了 GBK然后又存成了 UTF-8这种双重转换后汉字大概率已经彻底变了形神仙也救不回来。防患于未然比事后花时间逆推要省心得多。
返回列表