【发布时间】: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 字符集中的字符时,您希望发生什么?在这个样本中一切可能都还好,但在下一个样本中就不行了。当用户发现他们的数据丢失时,他们往往会不高兴,而当他们不知道原因时,他们会支持不高兴的趋势。