我已经尝试使用Google搜索,但是无法找到下面这段文字所属的字符集:

具有éœé›»ç”¢ç”Ÿè£ç½®ä¹‹å½±åƒè¼¸å…¥è£ç½®

但是将<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">放入该字符串并保存到HTML文件中后,我便能够正确地查看中文字符:

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

所以我的问题是:

  • 我可以使用哪些工具来检测此文本的字符集?
  • 我如何在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);
        }
    }
    

    谢谢。

    最佳答案

    当您在带有meta标签声明正确编码的文本文件中保存“坏”字符串时发生了什么情况,这是因为您的文本编辑器正在使用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。但是,有时候,数据库中的数据存储不正确,因此您必须借助这些游戏来解决问题。

    关于c# - 如何编码和解码残破的中文/Unicode字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10967786/

    10-12 13:02