如何编码和解码破碎的中文/ Unicode字符?

我试过谷歌搜索但无法找到下面这个文本属于哪个字符集:

具有éœé>»C”¢C”叶£ç½®ä¹<å½±åƒè¼¸å…¥è£ç½®

但是把并将该字符串保存到HTML文件中,我能够正确地查看中文字符:

具有静电产生装置之影像输入装置

所以我的问题是:

  1. 我可以使用哪些工具来检测此文本的字符集?

  2. 如何在C#中正确转换/编码/解码它们?

更新:为了完成,我已经更新了这个测试。

  [TestMethod] public void TestMethod1() { string encodedText = "具有éœé›»ç”¢ç”Ÿè£ç½®ä¹‹å½±åƒè¼¸å…¥è£ç½®"; Encoding utf8 = new UTF8Encoding(); Encoding window1252 = Encoding.GetEncoding("Windows-1252"); byte[] postBytes = window1252.GetBytes(encodedText); string decodedText = utf8.GetString(postBytes); string actualText = "具有靜電產生裝置之影像輸入裝置"; Assert.AreEqual(actualText, decodedText); } } 

谢谢。

将“坏”字符串保存在文本文件中并使用元标记声明正确编码时发生的情况是文本编辑器使用Windows-1252编码保存文件,但浏览器正在读取文件并将其解释为UTF -8。 由于“坏”字符串使用Windows-1252编码错误地解码UTF-8字节,因此您通过将文件编码为Windows-1252并解码为UTF-8来反转该过程。

这是一个例子:

 using System.Text; using System.Windows.Forms; namespace Demo { class Program { static void Main(string[] args) { string s = "具有靜電產生裝置之影像輸入裝置"; // Unicode Encoding Windows1252 = Encoding.GetEncoding("Windows-1252"); Encoding Utf8 = Encoding.UTF8; byte[] utf8Bytes = Utf8.GetBytes(s); // Unicode -> UTF-8 string badDecode = Windows1252.GetString(utf8Bytes); // Mis-decode as Latin1 MessageBox.Show(badDecode,"Mis-decoded"); // Shows your garbage string. string goodDecode = Utf8.GetString(utf8Bytes); // Correctly decode as UTF-8 MessageBox.Show(goodDecode, "Correctly decoded"); // Recovering from bad decode... byte[] originalBytes = Windows1252.GetBytes(badDecode); goodDecode = Utf8.GetString(originalBytes); MessageBox.Show(goodDecode, "Re-decoded"); } } } 

即使正确解码,您仍然需要支持显示字符的字体。 如果您的默认字体不支持中文,您仍可能看不到正确的字符。

正确的做法是弄清楚为什么你的字符串首先被解码为Windows-1252。 但有时,数据库中的数据存储错误,您必须使用这些游戏来解决问题。

我不太确定你的意思,但我猜你要在字节数组forms的特定编码中的字符串和字符串之间进行转换。 我们假设字符编码称为“FooBar”:

这是你编码和解码的方式:

 Encoding myEncoding = Encoding.GetEncoding("FooBar"); string myString = "lala"; byte[] myEncodedBytes = myEncoding.GetBytes(myString); string myDecodedString = myEncoding.GetString(myEncodedBytes); 

您可以在MSDN上了解有关Encoding类的更多信息。

在post结尾回答你的问题:

  1. 如果您想在运行时确定文本编码,您应该查看: http : //code.google.com/p/ude/

  2. 对于转换字符集,您可以使用http://msdn.microsoft.com/en-us/library/system.text.encoding.convert(v=vs.100).aspx

它是Windows Latin 1.我将中文文本作为UTF-8粘贴到BBEDIT(Mac的文本编辑器)中,并将文件重新打开为Windows Latin 1和bang,出现了确切的变音符号。

 string test = "敭畳灴獩楫n"; //incoming data. must be mesutpiskin byte[] bytes = Encoding.Unicode.GetBytes(test); string s = string.Empty; for (int i = 0; i < bytes.Length; i++) { s += (char)bytes[i]; } s = s.Trim((char)0); MessageBox.Show(s); //s=mesutpiskin