【问题标题】:Reliable method of reading Unicode and ISO88591 characters读取 Unicode 和 ISO88591 字符的可靠方法
【发布时间】: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 StudioSave all files in Visual Studio project as UTF-8

标签: c# json regex unicode


【解决方案1】:

在 Timothy Shields 的这篇帖子中找到了答案:

How to insert a Symbol (Pound, Euro, Copyright) into a Textbox

\u00A3 是英镑符号,£。

我将上面的十六进制代码添加到 JSON 文件中,所有测试都通过了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2012-02-14
    • 2015-09-25
    • 2012-09-20
    • 2011-10-18
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多