为什么我';m无法将ANSI编码的文件转换为UTF8

本文关键字:编码 ANSI 文件 转换 UTF8 为什么 | 更新日期: 2023-09-27 18:27:47

我有一个文本文件,其中的文本如下:

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

如果我用Notepad++打开,它会说编码是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?,我丢失了一个字符。我哪里错了?

为什么我';m无法将ANSI编码的文件转换为UTF8

问题似乎是在读取文件时,请尝试以下操作:

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。将其加载为Byte Array后,我们将跳过这一部分。

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