【发布时间】:2017-02-14 05:34:25
【问题描述】:
我的应用程序中有一个 json 文件,我可以读取它并从读取中获取字符串为 UTF-8。
using (StreamReader file = File.OpenText(filePath))
{
string json = file.ReadToEndAsync().Result;
}
我有一些正则表达式形式的特殊字符,包括 /:@~{+_&%$
这很好。一切正常。
但是,在 RegEx 中包含的 json 文件中也有 £ 符号的实例。 当使用 about 的代码(默认为 UTF-8 )读取 json 文件时,£ 字符出来并在字符串中显示为黑色菱形,中间有一个白色问号;因此,由于 RegEx 不正确,某些条件会失败。
原因是编码,UTF-8 无法理解这一点,因为它应该(据我所知)使用 ISO-8859-1 格式读取。
现在,当我更改代码以使用此标准读取 JSON 文件时
using (StreamReader file = new StreamReader(entityFilePath, Encoding.GetEncoding("iso-8859-1")))
我在 RegEx 的字符串中得到了正确的 £ 值。
但是,如果我想在我的 json 文件中使用其他 Unicode 值,例如 ÁÉÍÓÚáéíóú,使用 ISO-8859-1 读取它会导致它们被错误地检索和解释。
我的问题是,我如何安全可靠地读取我的 json 文件以检索完整的所有文本和完整的所有字符,包括 £ 符号?
亲切的问候
【问题讨论】:
-
问题是,创建文件时选择了哪种编码?
-
为什么不使用这个:StreamReader file = new StreamReader(filePath, Encoding.UTF8);
-
要么文件是在没有一致编码的情况下写入的(即,它已损坏),要么您不知道写入文件的编码。尝试使用
Encoding.GetEncodings().Select(i => i.GetEncoding())循环遍历所有编码,看看是否有一个适用于所有字符。 -
嗨 Lasse V,我在 Visual Studio 2015 中创建了 json 文件,方法是添加一个新项目 -> Json 文件。我实际上从来没有给编码太多,但老实说假设因为 ReadToAsync 方法是 UTF-8 并且新文件也将是相同的......我可以在这里尝试这个建议:stackoverflow.com/questions/18627694/…
-
如果您自己创建了文件,您可能需要确保 Visual Studio 以 UTF-8 创建文件。为此,请参阅 How to set standard encoding in Visual Studio 或 Save all files in Visual Studio project as UTF-8。