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

mel*_*aos 3 c# unicode model-view-controller

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

å...·æœ‰éœé>»C"¢C"叶£ç½®ä¹<å½±åƒè¼¸å...¥è£ç½®

但是<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">将该字符串放入并保存到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);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mar*_*nen 7

将"坏"字符串保存在带有元标记的文本文件中,声明正确编码时发生的情况是文本编辑器使用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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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