æ、Ø、å、ä、ö、üなどを読むのにどのエンコーディングを使うべきですか?ストリームリーダと外国の文字
答えて
Encoding.UTF8またはEncoding.Unicode。
StreamReaderクラスには、boolパラメータがあり、そのコンストラクタでエンコーディングを自動検出できます。
元のデータのエンコーディングは何でも使用してください。どこからデータを取得していますか、それがどのエンコーディングになっているかに関する情報がありますか?間違ったエンコーディングで読み込もうとすると、間違った答えが返されます:エンコーディングが文字を処理できるとしても、バイナリデータを誤って解釈するでしょう。
を取得してを選択すると、通常はUTF-8が適しています。あなたが遠く離れた東方のキャラクターをたくさん持っているなら、それはサイズの点で悪いですが、そうでなければ良いです。特に、ASCIIはまだ1文字あたり1バイトで出てきます。
ファイルのエンコーディングはどうすればわかりますか?プログラムは多くの場所から多くのファイルを使用します。ありがとう –
@Scott:あなたは、信頼できることができません。ファイルにはエンコーディングが含まれていません。あなたはそれを知る必要があります。たとえば、* every *ファイルは有効なWindows-1252ファイルですが、実際にはUTF-8の場合、結果は大きく異なります。 –
@Jon:Unicodeファイルには、BOM(バイトオーダーマーク)が含まれていて、エンコーディングの検出にUnicodeファイル(およびStreamReader)が使用できると仮定しています。 – leppie
エンコーディングはすべて、文字に8ビットを使用すると、256個の別個の文字しか扱えないという事実にまで及んでいます。英国と米国が規約を制定しているのを見ると、256の標準ASCII文字は主にアクセントのない西洋文字です。
ここで、UTF8とUTF16が再生されます。 UTF8はASCIIによく似ています。ほとんどの西洋文字に1バイトを使用します。しかし、通常のASCII範囲外の文字を示す特別なバイトがあります。特殊バイトの直後の2バイトが真の文字を示します。
UTF16(Unicodeとも呼ばれます)は特別なインジケータバイトを使用せず、すべての文字に16ビットを使用します。皆さんが知っているように、16ビットは65536個の異なる文字を提供しますが、これは世界の文字をすべてカバーするには十分ではありませんが、大部分はその仕事をします。
あなたの質問に答えてください:あなたのキャラクターの大部分がアクセントのない西洋人のキャラクターである場合、UTF8はあなたにとって最もコンパクトな表現です(多くのエディターで最も読みやすい)。大部分のキャラクターが非西洋(たとえば中国語)の場合、おそらくUnicode(別名UTF16)を使用することになります。
幸運を祈る!
他のすべての回答と同様に、適切なエンコーディングを使用する必要があります。
エンコードを検出する方法が問題です。それはあなたのファイルのソースに依存します。
- それがXMLファイルである場合は、エンコーディングを指定するファイルの先頭に
<?xml>
処理命令があるはずです。それがなければ、それはUTF8であると仮定すべきです。 - テキストファイルの場合は、UTF8エンコーディングを試すか、失敗すると、実行しているマシンのシステムロケールを試してみる必要があります。それが失敗した場合は、ファイルが作成されたマシンのシステムロケールを知ることができない人が分からない限り、あなたはほとんどあなた自身です。
いずれの場合でも、UTF8にフォールバックしてUTF16を使用して、すべてのファイルの約90%をカバーすることができます。過去5年間のほぼすべてのプログラムや言語がUnicodeをサポートしています。しかし、中国から多くのファイルを消費する場合は、最初にUTF16を試してみてください。これは、GB18030をエンコードするためにもう少し一般的です。
企業間メッセージングシステムで働いている人々から聞いたことから、ユニコードエンコーディングは、あなたが述べたようにまだ普及していません。まったく。業界では、他のシステムで行われた誤ったデコードを検出して修正するようなハックが一般的です。 –
完全に信頼できる方法はありませんが、ヒューリスティックを使用してエンコードを推測できます。
- byte order markを探します。
- BOMが見つからない場合は、ファイルがUTF-8であると想定し、解析してみます。 XMLファイルの場合は、宣言にエンコーディングが含まれている可能性があります。同様に、HTMLファイルにはメタエンコードタグが含まれている場合があります。
- 上記のすべてに失敗した場合は、UTF-8(またはANSI - あなたの選択)と仮定します。
Rick Strahl has a handy article BOMを介したエンコーディングの検出について。これはちょっと古い - System.Text.EncodingにはGetPreambleメソッドがあり、StreamReaderにはエンコードが検出されるようなオーバーロードがあります。
また、あなたは、Cááなどのような奇妙なcarachteres必ずしも
CultureInfo pt = CultureInfo.GetCultureInfo("pt-BR");
StreamReader fileReader = new StreamReader("C:\temp\test.txt",Encoding.GetEncoding(pt.TextInfo.ANSICodePage),true);
- 1. 外国文字strangley
- 2. 外国文字の謎
- 3. jQueryの入力値と外国文字
- 4. は、ASCII文字の外国バージョン
- 5. djangoクエリで外国文字を扱う
- 6. RSS +外国文字 - >検証エラー
- 7. MySQL:文字列のすべての外国文字を置換する
- 8. JUNK HADOOPでの外国語用のテキストパッドの文字mapreduce
- 9. 米国以外のキーボードでEclipseの特殊文字
- 10. 外国の文字は、HTMLページにいる私のスクリプトで
- 11. ReportLabの:中国/ Unicode文字
- 12. JavaScriptの国際文字
- 13. 中国語の文字PHPMailer
- 14. バッチファイル内の国際文字
- 15. 関数PHPスクリプトを取得する - 外国の文字変換
- 16. codeigniterプロジェクトで外国語の文字が表示されない
- 17. 外国語の文字をMySQLに挿入する
- 18. pygame画面に外国の文字を書く
- 19. R - 正規表現の外国Unicode文字を削除する
- 20. preg_match(国際文字とアクセント付き)
- 21. java正規表現の文字列は、リスト以外の2文字の国と一致します
- 22. PHP/AJAX:Ajaxレスポンスに外国文字を表示できません
- 23. 絵文字/国際キーボード
- 24. BeautifulSoup中国語文字エンコーディングエラー
- 25. String.length()vs全国文字
- 26. 中国語のフォントと太字の文字の動作
- 27. すべての外国の文字列番号を英語の数字文字列に変換する
- 28. 辞書と外国文字を含む配列を並べ替える?
- 29. 外国のデータとガベージコレクション
- 30. Flashの動的テキスト用の文字列の中国語文字
ないを読み取るために文化を置くことができます。それは入力エンコーディングに依存します。 –
BOMなしでUnicodeファイルを保存したい場合は、それが問題です:) – leppie
ストリームに書き込むことではなく、読み込みに関する質問です) –