有什么方法可以确定C#中字节数组的编码吗?

我有任何字符串,例如“Lorem ipsumáéíóúñÑç” ,并且使用几种编码来获取字节数组。

我想要一种检测字节数组中编码的唯一方法,然后再次获得字符串值。

也许还有其他问题,我将在数据库中有一列存储BLOB的列(如字节数组)。
以前在UTF-8中转换为字节数组的字符串。也许另一个应用程序使用Unicode编码将字符串转换为字节数组。

在数据库列中,有几种编码的字节数组。检测字节数组的编码将非常有用。我需要一种查找字节数组编码的方法。

测试:

string DataXmlForSupport = "<support><machinename></machinename><comments>Este es el log 1 áéíóú</comments></support>";
        string DataXmlForSupport2 = "Lorem ipsum áéíóú ñÑç";

        [TestMethod]
        public void Encoding_byte_array_string()
        {
            var uencoding = new System.Text.UnicodeEncoding();
            byte[] data = uencoding.GetBytes(DataXmlForSupport);

            var dataXml = Encoding.Unicode.GetString(data);
            Assert.AreEqual(DataXmlForSupport, dataXml, "Se esperaba resultados Unicode");

            dataXml = Encoding.UTF8.GetString(data);
            Assert.AreNotEqual(DataXmlForSupport, dataXml, "NO Se esperaba resultados UTF8");

            var utf8 = new System.Text.UTF8Encoding();
            data = utf8.GetBytes(DataXmlForSupport2);

            dataXml = Encoding.UTF8.GetString(data);
            Assert.AreEqual(DataXmlForSupport2, dataXml, "Se esperaba resultados UTF8");

            dataXml = Encoding.Unicode.GetString(data);
            Assert.AreNotEqual(DataXmlForSupport2, dataXml, "NO Se esperaba resultados Unicode");

        }

最佳答案

简而言之,不。请参阅How to detect the character encoding of a text file?,以获取有关各种编码的详细答案以及为何无法自动确定它们的原因。

最好的解决方案是将字符串从其原始编码转换为UTF8并将其转换为字节数组。然后,您将知道字节数组的编码...

10-07 19:17
查看更多