如何将一个字符串从ISO 8859-1转换为UTF-8?C# Windows Phone 7 -

3

我的问题很简单,但目前我不知道如何解决。我有一个以ISO-8859-1格式编码的字符串,我需要将这个字符串转换为UTF-8格式。我需要在Windows Phone 7 SDK中使用C#来实现。我该怎么做?谢谢

3个回答

5

微软官网的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);

3

关于先前的回答,有两点需要澄清:

没有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 类对文本的读取或保存的编码方式毫不知情。


如果我将我的“字符串”读取为字节数组,有一种方法可以将其转换吗? - Rdb

1
您可以使用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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接