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

如何将字符串从iso 8859-1转换为utf-8?C#Windows phone 7-,c#,windows-phone-7,utf-8,iso-8859-1,C#,Windows Phone 7,Utf 8,Iso 8859 1,我的问题很简单,但目前我不知道怎么做。我有一个ISO-8859-1格式的字符串,我需要将此字符串转换为UTF-8。我需要在WindowsPhone7SDK上用c#实现。我怎么做?感谢MSDN页面列出识别的编码 28591iso-8859-1西欧(iso) 对于您的问题,正确的选择是iso-8859-1,您可以将其传递到Encoding.GetEncoding var inputEncoding = Encoding.GetEncoding("iso-8859-1"); var text = in

我的问题很简单,但目前我不知道怎么做。我有一个ISO-8859-1格式的字符串,我需要将此字符串转换为UTF-8。我需要在WindowsPhone7SDK上用c#实现。我怎么做?感谢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);
的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

var inputEncoding = Encoding.GetEncoding("iso-8859-1");
var text = inputEncoding.GetString(input);
var output = Encoding.Utf8.GetBytes(text);
Encoding.GetString
方法采用
byte[]
参数,而不是
string
。NET中的所有字符串在内部表示为UTF-16;没有办法拥有“ISO-8859-1格式的字符串”。因此,您必须注意如何读取源代码(文件、网络),而不是如何处理字符串

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

string text = File.ReadAllText(path, Encoding.GetEncoding("iso-8859-1"));
File.WriteAllText(path, text, Encoding.UTF8);
要保存到UTF-8编码的文本文件,可以使用:

string text = File.ReadAllText(path, Encoding.GetEncoding("iso-8859-1"));
File.WriteAllText(path, text, Encoding.UTF8);
回复评论:

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


“编码”的概念涉及如何解释字节序列(无论是内存中的
byte[]
数组还是磁盘上的文件内容)。
字符串
类忽略了文本读取或应保存到的编码。

对前面答案的两个澄清:

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

var inputEncoding = Encoding.GetEncoding("iso-8859-1");
var text = inputEncoding.GetString(input);
var output = Encoding.Utf8.GetBytes(text);
Encoding.GetString
方法采用
byte[]
参数,而不是
string
。NET中的所有字符串在内部表示为UTF-16;没有办法拥有“ISO-8859-1格式的字符串”。因此,您必须注意如何读取源代码(文件、网络),而不是如何处理字符串

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

string text = File.ReadAllText(path, Encoding.GetEncoding("iso-8859-1"));
File.WriteAllText(path, text, Encoding.UTF8);
要保存到UTF-8编码的文本文件,可以使用:

string text = File.ReadAllText(path, Encoding.GetEncoding("iso-8859-1"));
File.WriteAllText(path, text, Encoding.UTF8);
回复评论:

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


“编码”的概念涉及如何解释字节序列(无论是内存中的
byte[]
数组还是磁盘上的文件内容)。
字符串
类不知道从中读取文本或保存文本的编码方式。

您可以使用
转换
,它工作得很好,尤其是在使用字节数组时:

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);

您可以使用
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);
所以如果我把“字符串”读作字节数组,有办法转换它吗?如果我把“字符串”读作字节数组,有办法转换它吗?