2013-10-22 68 views
4

有沒有什麼辦法可以確定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"); 

     } 
+0

你應該修正你的數據庫只有一種編碼,或者將編碼名稱存儲在一個單獨的列中。無法可靠地檢測編碼。 – SLaks

+0

通常,將您的編碼與數據關聯是您的工作。例如,在大多數XML/HTML文件中,您將看到的第一件事情是描述編碼的屬性。如果沒有提供編碼,那麼根據規範,通常會有一個推測的默認編碼。 –

+0

[如何檢測文本文件的字符編碼?]的可能的重複(http://stackoverflow.com/questions/4520184/how-to-detect-the-character-encoding-of-a-text-file) –

回答

2

總之,沒有。請參閱How to detect the character encoding of a text file?以獲得關於各種編碼的詳細答案以及爲什麼它們不能自動確定。

您的最佳解決方案是將字符串從原始編碼轉換爲UTF8並將其轉換爲字節數組。然後你就會知道你的字節數組的編碼...

+0

如果我將字符串轉換爲UTF8編碼,則字節數組的編碼是UTF8。無論如何,安全地將字符串轉換爲UTF8的最佳方式是什麼? – Kiquenet