9

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");

        }
4

3 に答える 3

4

要するに、いいえ。テキストファイルの文字エンコーディングを検出する方法を参照してください。さまざまなエンコーディングに関する詳細な回答と、それらが自動的に決定できない理由については。

最善の解決策は、文字列を元のエンコーディングから UTF8 に変換し、それをバイト配列に変換することです。次に、バイト配列のエンコーディングがわかります...

于 2013-10-22T13:48:23.943 に答える