【问题标题】:c# converting a .csv file from Windows UTF-8 to w1252c# 将 .csv 文件从 Windows UTF-8 转换为 w1252
【发布时间】:2017-12-29 09:31:15
【问题描述】:

我需要将 .csv 文件从 UTF-8 转换为 W1252(西欧)。

我已经尝试了 MSDN 页面中的示例和以下代码,但没有成功

        Encoding utf8 = Encoding.UTF8;
        //Encoding utf8 = new UTF8Encoding();
        Encoding win1252 = Encoding.GetEncoding(1252);


        string src = today.ToString("dd-MM-yyyy") + "-ups.csv";
        string source = File.ReadAllText(src);


        byte[] input = source.ToUTF8ByteArray();
        byte[] output = Encoding.Convert(utf8, win1252, input);

        File.WriteAllText(src + "w1252", win1252.GetString(output));

使用扩展方法

   public static class StringHelper
    {
        public static byte[] ToUTF8ByteArray(this string str)
        {
            Encoding encoding = new UTF8Encoding();
            return encoding.GetBytes(str);
        }
    }

在此之后,文件以 W1252 格式打开时仍会读取损坏的字符,如果以 UTF-8 格式打开,则可以正常工作,确认它不好。

谢谢!

【问题讨论】:

  • "在此之后,当打开为 W1252 时,文件仍然会读取损坏的字符" - 我们不知道您使用什么来读取它,那些“损坏的字符”是什么或原始的正确的字符。请注意,并非 UTF-8 中可表示的所有内容 都可以在 Windows-1252 中表示。 (通过将字符串转换回 UTF-8 然后使用 Encoding.Convert,您所做的工作也比您需要的要多,但这是另一回事。)从根本上说,这篇文章中缺少很多信息。
  • 是的,当文件包含不在 Windows-1252 字符集中的字符时,您希望发生什么?在这个样本中一切可能都还好,但在下一个样本中就不行了。当用户发现他们的数据丢失时,他们往往会不高兴,而当他们不知道原因时,他们会支持不高兴的趋势。

标签: c# csv utf-8


【解决方案1】:

为什么不读取初始编码 (Encoding.UTF8),然后写入目标编码 (Encoding.GetEncoding(1252)):

string fileName = @"C:\MyFile.csv";

File.WriteAllText(fileName, File
  .ReadAllText(fileName, Encoding.UTF8), Encoding.GetEncoding(1252));

【讨论】:

  • 好点,我不知道为什么我看的那么远。您的解决方案按预期工作。谢谢!
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 2013-10-10
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多