2017-01-31 4 views
0

私はサードパーティのアプリケーションから受け取った文字列を持っていて、Windowsサーフェス上のC#を使ってどの言語でも正しく表示したいと思います。誤ったエンコーディングに、私の文字列の部分はペルシア語(ペルシャ語、アラビア語)で次のようになりますUTF-8バイトをLatin-1文字としてデコード

Ù... OU「-o±Ù†U-U ...ÙÛŒ、Ø ¬Ø¯ÛŒØ¯-5-436x500

それは次のようになります。一方:

مدل-رنگ-موی-جدید-5から436 X500

このリンクは、これを正しく変換します

http://www.ltg.ed.ac.uk/~richard/utf-8.html

は、私はC#でそれを行うことができますどのように?

+0

続きますか?ファイルとネットワークメッセージは、通常は文字列ではなくバイトです。 – CodesInChaos

答えて

1

あなたの質問の説明から何が起こっているのかを正確に伝えるのは非常に難しいです。文字列全体の代わりに単一の文字を使用して何が起こっているのかを例え、いくつかのエキゾチックな文字セットに属していない例文文字、たとえば箇条書き文字を選択した場合は、 (u2022)かそのようなものです。

とにかく、おそらく何が起こっていることはこれです:

文字「ر」D8 B1のバイトシーケンスとしてUTF-8で表されますが、何を参照すると、「ر」であり、それが原因でUTF中ですさ-16Øはu00D8であり、±はu00B1である。したがって、入力テキストはもともとUTF-8でしたが、アプリケーションでdotnet Unicode Stringにインポートする過程で、ANSIやLatin-1などの8ビット文字セットに誤って解釈されていました。だからこそあなたはユニコードStringを持っています。このユニコードはガベージを含んでいるようです。

しかし、8ビット文字をUnicodeに変換するプロセスは大部分が破壊的ではないため、すべての情報がそのまま残っているため、リンクしたUTF-8ツールはまだまだ意味をなさないそれから。

あなたがする必要があるのは、文字列をANSI(またはLatin-1、何でも)バイトの配列に変換してから、文字列を正しい方法で再構築することです。これはUTF-8からUnicodeへの変換です。私は簡単にので、ここで、あなたの状況を再現することはできません

はしようとするいくつかのものです:

byte[] bytes = System.Text.Encoding.Ansi.GetBytes(garbledUnicodeString); 

は、サードパーティのアプリケーションから文字列を受け取るにはどうすればよい

string properUnicodeString = System.Text.Encoding.UTF8.GetString(bytes); 
関連する問題