有沒有什麼辦法可以確定C#中的字節數組編碼?檢測字節數組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");
}
你應該修正你的數據庫只有一種編碼,或者將編碼名稱存儲在一個單獨的列中。無法可靠地檢測編碼。 – SLaks
通常,將您的編碼與數據關聯是您的工作。例如,在大多數XML/HTML文件中,您將看到的第一件事情是描述編碼的屬性。如果沒有提供編碼,那麼根據規範,通常會有一個推測的默認編碼。 –
[如何檢測文本文件的字符編碼?]的可能的重複(http://stackoverflow.com/questions/4520184/how-to-detect-the-character-encoding-of-a-text-file) –