【问题标题】:Encoding of character in textfield doesnt show correctly in export using ASP.NET MVC文本字段中的字符编码在使用 ASP.NET MVC 导出时无法正确显示
【发布时间】:2021-03-20 03:52:46
【问题描述】:

有人在输入高度时加上了这个撇号,可能是从 Word 文档中复制和粘贴的。它在网络上显示良好,但在导出时,文本会带有一个有趣的字符。我可以在输入保存或导出上做些什么来解决这个问题,而不会导致整个网站出现问题吗?我正在使用 ASP.NET MVC 和 .NET 4.8。

文本输入

6’2

CSV 导出

6’2

【问题讨论】:

标签: .net asp.net-mvc csv character-encoding export-to-csv


【解决方案1】:

根据您保存文件的方式,最简单的方法可能是确保将其写为 Unicode。假设您可以选择StreamWriter,您可以这样做:

void Main()
{
    var dt = new DataTable(); 
    dt.Columns.Add("C1");
    dt.Columns.Add("C2");
    
    var r = dt.NewRow();
    r[0] = "test";
    r[1] = "6’2";
    dt.Rows.Add(r);
    
    var streamWriter = new StreamWriter("D:\\test.csv"); // defaults to Unicode
    foreach(DataRow row in dt.Rows)
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            streamWriter.Write(row[i].ToString());
            streamWriter.Write(",");
        }
    streamWriter.Flush();
}

【讨论】:

    【解决方案2】:

    您的文本似乎写成 Unicode(特别是 UTF8)就好了。

    请记住,CSV 文件只是字节,因此正确读取它需要写入者和读取者就编码达成一致。

    如果你把一个UTF8编码的字符(U+2019)读者也必须理解相同的编码,并同意使用它。如果没有,您将获得“mojibake”。这并不意味着内容错误(或更改)。它只是以读者不期望的格式编码。

    显然您使用的是西方字符集。如果您的计算机设置为俄语,那么您的输出会有所不同。

    你能透露一下你用什么来读取创建的文件吗?也许您应该按照上面评论中的建议放置 BOM 标记?这告诉理解 UTF8 的读者,这个 实际上是一个 UTF8 文件。注意:不理解 BOM 标记的读者可能会将其显示为不可读的字符。

    如果您必须为此文件使用旧版阅读器,一种解决方案可能是使用 iconv 或类似工具解析文件。

        ’
        https://unicode-table.com/en/2019/
        
        UTF8 encoded:
            E2 80 99        hex
            226 128 153     decimal
        
        Read as Windows 1252
            6’2
        
          â = E2
          € = 80
          ™ = 99
    

    【讨论】:

      【解决方案3】:

      试试这个

      string utf8_String = "day’s";
      byte[] bytes = Encoding.Default.GetBytes(utf8_String);
      utf8_String = Encoding.UTF8.GetString(bytes);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 2019-06-08
        相关资源
        最近更新 更多