2015-12-22 114 views
1

我有一个文本文件,文本像这样:为什么我无法将以ANSI编码的文件转换为UTF8?

025069;Zoppè di Cadore;BL;VEN;0437;32010;M189;271;http://www.comuni-italiani.it/025/069/ 

,如果我用记事本++打开,它说的编码是ANSI。所以,我试图将其转换并保存UTF8:

var ABSfilePath = Server.MapPath(UiUtils.GetPath + "/utility/listacomuni.txt"); 
var myString = File.ReadAllText(ABSfilePath); 
byte[] bytes = Encoding.Default.GetBytes(myString); 
myString = Encoding.UTF8.GetString(bytes); 
File.WriteAllText(Server.MapPath(UiUtils.GetPath + "/utility/listacomuni2.txt"), myString); 

但结果是:

025069;Zopp? di Cadore;BL;VEN;0437;32010;M189;271;http://www.comuni-italiani.it/025/069/ 

Zoppè现在是Zopp?了,我已经失去了一个char。我错在哪里?

+1

如果这只是一件事情,您可以将它转换为记事本中的UTF-8 – DGibbs

+0

它适合您吗? 我遇到同样的问题。我有一个SQL数据库,我想用UTF-8提取导入/导出文件,但某些字符不能很好地显示,例如“é”变成“,”。 我使用记事本+,我想将这些导入/导出文件添加到Prestashop。 我已经尝试了几种方法,但仍然无法使用。 你们能帮我吗?也许可以直接在SQL中创建一些东西,但可惜我不是专家。 〜Maxence Boudaud – Christopher

回答

1

的问题似乎读取文件时,请试着这样:

var ABSfilePath = Server.MapPath(UiUtils.GetPath + "/utility/listacomuni.txt"); 
var myBytes = File.ReadAllBytes(ABSfilePath); 
var utf8Bytes byte[] = ASCIIEncoding.Convert(ASCIIEncoding.ASCII, UTF8Encoding.UTF8, myBytes); 
File.WriteAllBytes(Server.MapPath(UiUtils.GetPath + "/utility/listacomuni2.txt"), utf8Bytes); 

当你阅读使用File.ReadAllBytes字符串,就会将其加载为UTF-8了。将它作为字节数组加载时,我们跳过这一部分。

您还需要使用ASCIIEncoding.Convert来转换数据。

相关问题