如何在 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# 中读取 é、â 等特殊字符的主要内容,如果未能解决你的问题,请参考以下文章
Rails CSV 导出到 excel 会产生特殊的 Â 和 & 字符