You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取含en dash短破折号的文本文件时字符显示为?的问题

C#读取短破折号显示为问号的解决办法

1. 找准文件的实际编码

你试过多种编码无效,核心问题大概率是没匹配到文件真实的编码格式。用Notepad++就能快速确认:

  • 打开你的sample.txt,点击顶部「编码」菜单,查看当前选中的选项(常见的如Windows-1252、ISO-8859-1)
  • 确定编码后,用对应Encoding读取文件,比如Windows-1252的编码ID是1252,代码示例:
var targetEncoding = Encoding.GetEncoding(1252);
var content = File.ReadAllText(@"C:\fullfilepath\sample.txt", targetEncoding);

2. 修复控制台显示问题

就算文件读取正确,Windows控制台默认编码(一般是GBK或OEM编码)不支持显示U+2013短破折号,照样会输出问号。只需给控制台设置UTF-8输出编码:
在Console.WriteLine前添加一行:

Console.OutputEncoding = Encoding.UTF8;

完整可用代码

static void Main(string[] args)
{
    // 替换为你文件的真实编码,比如Windows-1252
    var fileEncoding = Encoding.GetEncoding(1252);
    var content = File.ReadAllText(@"C:\fullfilepath\sample.txt", fileEncoding);
    
    // 让控制台支持UTF-8字符显示
    Console.OutputEncoding = Encoding.UTF8;
    Console.WriteLine(content);
    Console.ReadKey();
}

3. 不确定编码?用二进制验证

如果拿不准文件编码,直接读取字节查看短破折号对应的数值:

var bytes = File.ReadAllBytes(@"C:\fullfilepath\sample.txt");
// 找到短破折号位置的字节,对比编码表:
// Windows-1252中短破折号对应0x96;UTF-8中对应0xE2 0x80 0x93

比如读到0x96就用1252编码,读到0xE2 0x80 0x93就是UTF-8(那之前没效果就是控制台编码的问题)。

内容的提问来源于stack exchange,提问作者Uğur Can

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:10:26