【问题标题】:convert .csv(ANSI) into .csv(UTF-8)将 .csv(ANSI) 转换为 .csv(UTF-8)
【发布时间】:2019-02-10 11:01:39
【问题描述】:

我的电脑中有一个日文环境。所以我需要一个程序来将我的 .csv ANSI 转换为 .csv UTF-8。我尝试使用此代码:

string st = File.ReadAllText("C:\\Users\\user\\Desktop\\train1.csv");            
System.IO.File.WriteAllText("C:\\Users\\user\\Desktop\\train2.csv",st.ToString(), Encoding.UTF8); 

文件 train2.csv 已成功创建,但是由于转换,文本变得不可读。这样做的正确方法是什么?

【问题讨论】:

  • st.ToString() 不需要
  • 日文字符是映射到 ascii 128-255 还是 unicode(两个字节)?

标签: c# csv utf-8 ansi


【解决方案1】:

我假设输入文件编码没有被正确检测到,所以你应该定义它

string st = File.ReadAllText("C:\\Users\\user\\Desktop\\train1.csv", Encoding.Default); //ANSI

Documentation:

此方法尝试根据字节顺序标记的存在自动检测文件的编码。可以检测编码格式 UTF-8 和 UTF-32(big-endian 和 little-endian)。

阅读时使用ReadAllText(String, Encoding)方法重载 可能包含导入文本的文件,因为无法识别 可能无法正确读取字符。

【讨论】:

    【解决方案2】:

    StreamReader类可以支持读取带编码的文件

    StreamReader st = new StreamReader("C:\\Users\\user\\Desktop\\train1.csv", 
                                                     System.Text.Encoding.ASCII);
    

    之后,您可以将数据写入基于StreamWriter的文件

    【讨论】:

    • ASCII 不会将 UTF-8 无法解码为相同字符的任何字符解码。所以,ASCII 的例子走错了方向。
    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多