我的问题很简单,但目前我不知道如何解决。我有一个以ISO-8859-1格式编码的字符串,我需要将这个字符串转换为UTF-8格式。我需要在Windows Phone 7 SDK中使用C#来实现。我该怎么做?谢谢
我的问题很简单,但目前我不知道如何解决。我有一个以ISO-8859-1格式编码的字符串,我需要将这个字符串转换为UTF-8格式。我需要在Windows Phone 7 SDK中使用C#来实现。我该怎么做?谢谢
微软官网的Encoding 类
页面列出了支持的编码方式。
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.GetBytes
将您的 string
转换回一个字节数组(可能是不同编码的),就像其他答案中所演示的那样。
“编码”的概念涉及如何解释字节序列(无论是内存中的 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);