有没有办法在C#中确定字节数组的编码?
我有任何字符串,例如“LoremipsumáéíóúñÑç”,我使用多种编码获取字节数组。
我想在字节数组中检测编码的唯一方法,我再次得到字符串值。
其他问题,也许,我会在数据库中有一个存储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");
}
答案 0 :(得分:2)
简而言之,没有。请参阅How to detect the character encoding of a text file?以获取有关各种编码的详细答案以及无法自动确定的原因。
您最好的解决方案是将字符串从其原始编码转换为UTF8并将其转换为字节数组。然后你就会知道你的字节数组的编码......
答案 1 :(得分:0)
作为其他回应的补充,您可以尝试执行以下操作:
string str = BitConverter.ToString(byte_array) byte_array = Encoding.UTF8.GetBytes(str);
答案 2 :(得分:0)
我意识到我在这里参加聚会迟到了,但是我只是需要做这件事,并且找到了一种很好的方法来做到这一点:
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!
}