6

グーグルで調べてみましたが、以下のテキストが属する文字セットを見つけることができませんでした:

具有éœé›»ç”¢ç”Ÿè£ç½®ä¹‹å½±åƒè¼¸å…¥è£ç½®

しかし<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">、その文字列を HTML ファイルに入れて保持すると、漢字を正しく表示できました。

具有靜電產生裝置之影像輸入裝置 

だから私の質問は:

  1. このテキストの文字セットを検出するには、どのツールを使用できますか?

  2. そして、C#でそれらを適切に変換/エンコード/デコードするにはどうすればよいですか?

更新: 完成のために、このテストを更新しました。

   [TestMethod]
    public void TestMethod1()
    {
        string encodedText = "具有éœé›»ç”¢ç”Ÿè£ç½®ä¹‹å½±åƒè¼¸å…¥è£ç½®&quot;;
        Encoding utf8 = new UTF8Encoding();
        Encoding window1252 = Encoding.GetEncoding("Windows-1252");

        byte[] postBytes = window1252.GetBytes(encodedText);
        
        string decodedText = utf8.GetString(postBytes);
        string actualText = "具有靜電產生裝置之影像輸入裝置&quot;;
        Assert.AreEqual(actualText, decodedText);
    }
}
4

5 に答える 5

9

正しいエンコーディングを宣言するメタ タグを使用してテキスト ファイルに「不正な」文字列を保存すると、テキスト エディタが Windows-1252 エンコーディングでファイルを保存しているのに、ブラウザがファイルを読み取って UTF として解釈していることが原因です。 -8. 「悪い」文字列は Windows-1252 エンコーディングで UTF-8 バイトに誤ってデコードされているため、ファイルを Windows-1252 としてエンコードし、UTF-8 としてデコードすることでプロセスを逆にしています。

次に例を示します。

using System.Text;
using System.Windows.Forms;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "具有靜電產生裝置之影像輸入裝置"; // Unicode
            Encoding Windows1252 = Encoding.GetEncoding("Windows-1252");
            Encoding Utf8 = Encoding.UTF8;
            byte[] utf8Bytes = Utf8.GetBytes(s); // Unicode -> UTF-8
            string badDecode = Windows1252.GetString(utf8Bytes); // Mis-decode as Latin1
            MessageBox.Show(badDecode,"Mis-decoded");  // Shows your garbage string.
            string goodDecode = Utf8.GetString(utf8Bytes); // Correctly decode as UTF-8
            MessageBox.Show(goodDecode, "Correctly decoded");

            // Recovering from bad decode...
            byte[] originalBytes = Windows1252.GetBytes(badDecode);
            goodDecode = Utf8.GetString(originalBytes);
            MessageBox.Show(goodDecode, "Re-decoded");
        }
    }
}

正しくデコードされたとしても、表示される文字をサポートするフォントが必要です。デフォルトのフォントが中国語をサポートしていない場合でも、正しい文字が表示されないことがあります。

正しいことは、最初に文字列が Windows-1252 としてデコードされた理由を突き止めることです。ただし、データベース内のデータが最初から正しく保存されていない場合があり、これらのゲームを使用して問題を解決する必要があります。

于 2012-06-10T17:12:10.697 に答える
1
string test = "敭畳灴獩楫n"; //incoming data. must be mesutpiskin 

byte[] bytes = Encoding.Unicode.GetBytes(test);

string s = string.Empty;

for (int i = 0; i < bytes.Length; i++)
{
    s += (char)bytes[i];
}

s = s.Trim((char)0);

MessageBox.Show(s);
//s=mesutpiskin 
于 2015-12-10T11:17:43.690 に答える
0

投稿の最後で質問に答えます。

  1. 実行時にテキスト エンコーディングを決定したい場合は、http ://code.google.com/p/ude/ を参照してください。

  2. 文字セットを変換するには、 http://msdn.microsoft.com/en-us/library/system.text.encoding.convert( v=vs.100 ).aspx を使用できます

于 2012-06-10T10:29:07.033 に答える
0

これは Windows Latin 1 です。中国語のテキストを UTF-8 として BBEDIT (Mac 用のテキスト エディター) に貼り付け、ファイルを Windows Latin 1 として再度開くと、正確な分音符号が表示されました。

于 2012-06-10T15:49:14.683 に答える
0

どういう意味かよくわかりませんが、バイト配列形式の特定のエンコーディングの文字列と文字列の間で変換したいと思っていると思います。文字エンコーディングが「FooBar」と呼ばれるとしましょう。

これは、エンコードおよびデコードする方法です。

Encoding myEncoding = Encoding.GetEncoding("FooBar");
string myString = "lala";
byte[] myEncodedBytes = myEncoding.GetBytes(myString);
string myDecodedString = myEncoding.GetString(myEncodedBytes);

Encoding クラスの詳細については、MSDNを参照してください。

于 2012-06-10T10:21:47.907 に答える