如何在 C# 中读取 é、â 等特殊字符

Posted

技术标签:

【中文标题】如何在 C# 中读取 é、â 等特殊字符【英文标题】:how to read special character like é, â and others in C# 【发布时间】:2011-12-26 17:22:09 【问题描述】:

我看不懂那些特殊字符 我试过这样

第一种方式#

string xmlFile = File.ReadAllText(fileName);

第二种方式#

FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
StreamReader r = new StreamReader(fs);
string s = r.ReadToEnd();

但是这两个语句都不理解那些特殊字符。 我应该如何阅读?

更新###

我也尝试使用

进行所有编码
string xmlFile = File.ReadAllText(fileName, Encoding. );

但还是不明白那些特殊字符。

【问题讨论】:

你怎么知道你的程序不接受这些字符?你在和他们做什么?如果您将它们吐回控制台,则可能是您的终端没有正确显示它们,但您正在阅读它们就好了。 什么读不正确?显示一行示例文本,其中包含读取错误的数据、您观察到的结果、您期望的结果以及您如何进行观察。 【参考方案1】:

没有“特殊字符”这样的东西。那些可能是来自 latin1 集 (iso-8859-1) 的扩展 ascii 字符。 您可以通过向流阅读器显式提供编码来读取它们(否则它将假定为 UTF8)

using (StreamReader r = new StreamReader(fileName, Encoding.GetEncoding("iso-8859-1")))
    r.ReadToEnd();

【讨论】:

string[] 行 = File.ReadAllLines(fileName,System.Text.Encoding.GetEncoding("iso-8859-1"));也很完美 这解决了我的问题,但我不明白为什么。在我的情况下,我的流式阅读器在浏览 json 文件时(使用 UTF-8 解析时)将 'ë' 替换为 '�'。但是,为什么 UTF-8 肯定知道字符“ë”,而 json 没有我知道的编码?还是这与 .NET 运行时有关? 应用这个之后,我的问题解决了乘法和加号,但是撇号 + S ('s) 没有正确显示,它用方形这个符号代替。如何解决这个问题?【参考方案2】:
StreamReader sr = new StreamReader(stream, Encoding.UTF8)

【讨论】:

StreamReader 默认使用 UTF8。 是的,我知道。但我尝试读取包含重音等的文件文本,并返回类似:??例如,而不是“á”。我将编码设置为 utf8(如此处所建议的),效果很好。 嗯我不确定...我将不得不查看代码和实际文件以了解那里发生了什么。但是根据这个msdn.microsoft.com/en-us/library/f2ke0fzy.aspxStreamREader init 默认情况下使用UTF8编码,就我尝试而言,情况就是这样。【参考方案3】:

你必须告诉 StreamReader 你正在像这样读取 Unicode

StreamReader sr = new StreamReader(stream, Encoding.Unicode);

如果您的文件属于其他encoding, specify it as the second parameter

【讨论】:

由于某种原因,我得到了中文字符(我需要扩展拉丁文)。【参考方案4】:

这对我有用:

var json = System.IO.File.ReadAllText(@"././response/response.json" , System.Text.Encoding.GetEncoding("iso-8859-1"));

【讨论】:

【参考方案5】:

我必须先“找到”文件的编码

//try to "find" the encoding, if not found, use UTF8
var enc = GetEncoding(filePath)??Encoding.UTF8;
var text = File.ReadAllText(filePath, enc );

(请参考this答案获取GetEncoding函数)

【讨论】:

【参考方案6】:

如果你可以修改有问题的文件,你可以用编码保存它。

我有一个我在 VS 中(通常)创建的 json 文件,我遇到了同样的问题。我没有在读取文件时指定编码(我使用的是默认为 UTF8 的 System.IO.File.ReadAllText),而是重新保存了文件(文件->另存为)并在保存按钮上单击箭头并选择了“ Save with Encoding”,然后选择“Unicode (UTF-8 with signature) - Codepage 65001”。

问题解决,读取文件时无需指定编码。

【讨论】:

以上是关于如何在 C# 中读取 é、â 等特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

带有 é 等特殊字符的 json

Rails CSV 导出到 excel 会产生特殊的 Â 和 &amp 字符

如何完全替换 PHP 中的所有特殊字符而不在结果中留下任何 HTML 实体

将单词与特殊字符(é、è、...)进行比较时忽略变音符号

使用 perl 脚本从字符串中删除特殊字符

通过删除特殊字符改进 Tesseract OCR 结果