检测字节数组 C# 的编码

本文关键字:编码 数组 字节 字节数 检测 | 更新日期: 2023-09-27 18:36:28

有没有办法在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");
        }

检测字节数组 C# 的编码

简而言之,没有。请参阅如何检测文本文件的字符编码?有关各种编码的详细答案以及为什么无法自动确定它们。

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

我意识到我在这里参加聚会迟到了,但我只是需要做这件事,并找到了一个好方法:

byte[] data; // Populate this however you see fit with your data
string text;
Encoding enc;
using (StreamReader reader = new StreamReader(new MemoryStream(data), 
                                              detectEncodingFromByteOrderMarks: true))
{
    text = reader.ReadToEnd();
    enc = reader.CurrentEncoding; // the reader detects the encoding for you!
}

补充其他响应,您可以尝试执行以下操作:

string str = BitConverter.ToString(byte_array);
byte[] byte_array = Encoding.UTF8.GetBytes(str);