如何将字符串从iso 8859-1转换为utf-8?C#Windows手机7-

本文关键字:utf-8 C#Windows 手机 转换 8859-1 字符串 iso | 更新日期: 2023-09-27 18:25:45

我的问题很简单,但目前我不知道如何做到这一点。我有一个ISO-8859-1格式的字符串,我需要将这个字符串转换为UTF-8。我需要在windows phone 7 sdk上的c#中完成它。我该怎么做?感谢

如何将字符串从iso 8859-1转换为utf-8?C#Windows手机7-

Encoding class的MSDN页面列出了可识别的编码。

28591 iso-8859-1西欧(ISO)

对于您的问题,正确的选择是iso-8859-1,您可以将其传递给Encoding.GetEncoding

var inputEncoding = Encoding.GetEncoding("iso-8859-1");
var text = inputEncoding.GetString(input);
var output = Encoding.Utf8.GetBytes(text);

对前面答案的两个澄清:

没有Encoding.GetText方法(除非它是专门为WP7框架引入的)。该方法应该是Encoding.GetString

Encoding.GetString方法采用byte[]参数,而不是string。.NET中的所有字符串在内部都表示为UTF-16;没有办法拥有"ISO-8859-1格式的字符串"。因此,您必须小心如何读取源(文件、网络),而不是如何处理字符串。

例如,要读取ISO-8859-1编码的文本文件,可以使用:

string text = File.ReadAllText(path, Encoding.GetEncoding("iso-8859-1"));

要保存到UTF-8编码的文本文件,可以使用:

File.WriteAllText(path, text, Encoding.UTF8);

回复评论:

是的。您可以使用Encoding.GetString将字节数组(假设它包含特定编码下文本的字符值)解码为string,并使用Encoding.GetBytesstring转换回字节数组(可能是不同编码),如其他答案所示。

"编码"的概念与如何解释字节序列(无论是内存中的byte[]数组还是磁盘上文件的内容)有关。string类忽略了从中读取或应保存文本的编码。

您可以使用Convert,它工作得很好,尤其是当您有字节数组时:

var latinString = "Řr"; // år
Encoding latinEncoding = Encoding.GetEncoding("iso-8859-1");
Encoding utf8Encoding = Encoding.UTF8;
byte[] latinBytes = latinEncoding.GetBytes(latinString);
byte[] utf8Bytes = Encoding.Convert(latinEncoding, utf8Encoding, latinBytes);
var utf8String = Encoding.UTF8.GetString(utf8Bytes);