使用fc指令以后的输出结果显示为乱码

huiiili 20 信誉分
2025-10-31T06:58:44.64+00:00

使用fc指令的输出显示为乱码,在一个乱码恢复网站看到了:乱码的原来编码是utf-8,现在编码是iso-8859-1才能正常显示为比如“阿织”

在区域设置里勾选或是不勾选‘beta版’选项时使用fc指令的输出都是乱码,充其量乱码的符号特征不一样

想知道有没有办法让fc指令的输出不再显示为乱码,比如是否有办法修改fc程序的源码……

截图如下用户的图像

用户的图像

用户的图像

Windows 开发 | Windows API - Win32
0 个注释 无注释
{count} 票

问题作者接受的答案
  1. Danny Nguyen (WICLOUD CORPORATION) 5,400 信誉分 Microsoft 外部员工 仲裁人
    2025-11-03T07:43:17.2433333+00:00

    你看到的乱码是因为 fc.exe 是很老的 Windows 工具,它根本不真正支持 UTF‑8。它只会把文本当成:单字节“ANSI”(当前系统代码页)或带 BOM 的 UTF‑16(配合 /u)。UTF‑8 文件(尤其无 BOM)被它按单字节拆开,多字节中文序列被误解,再按代码页显示,就成了截图里的乱符。chcp 65001 或勾选“测试版:使用 Unicode UTF‑8 提供全球语言支持”只是在改变显示所用的代码页,并不能让 fc 学会解析 UTF‑8。

    解决思路两条:

    1. 还想用 fc:先把两个文件转成带 BOM 的 UTF‑16 LE,再用 fc /u
      
         (Get-Content compare.txt  -Raw) | Set-Content compare_utf16.txt  -Encoding Unicode
      
         (Get-Content standard.txt -Raw) | Set-Content standard_utf16.txt -Encoding Unicode
      
         fc /u compare_utf16.txt standard_utf16.txt
      
      
    2. 更长远:换支持 UTF‑8 的 diff 工具,例如:
      • Git:git diff --no-index compare.txt standard.txt
      • WSL:diff -u compare.txt standard.txt
      • PowerShell:
        
             Compare-Object (Get-Content compare.txt -Encoding utf8) (Get-Content standard.txt -Encoding utf8)
        
        
      • 或 WinMerge / Beyond Compare / VS Code 等图形工具。
    2 个人认为此答案很有帮助。

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。