2

入力ファイルからデータを読み取るときに、\ 記号が StreamReader によって読み取られていないことに気付きました。Mozilla Firefox では、入力ファイルの種類が Western (ISO-8859-1) として表示されました。

エンコーディング パラメータをいじってみると、次の値で正常に機能することがわかりました。

System.Text.Encoding.GetEncoding(1252) // (western iso 88591)

System.Text.Encoding.Default 

System.Text.Encoding.UTF7

現在、「デフォルト」設定を使用することを計画していますが、これが正しい決定であるかどうかはよくわかりません. 既存のコードはエンコーディングを使用していないため、何かを壊すのではないかと心配しています。

私はエンコーディングについてほとんど(またはまったく)知りません。どうすればいいですか?System.Text.Encoding.Default を使用するという私の決定は安全ですか? ファイルを特定の形式で保存するようにユーザーに依頼する必要がありますか?

4

3 に答える 3

3

コード ページ 1252 は、ISO-Latin-1 とまったく同じではありません。ISO-Latin-1 が必要な場合は、 を使用しますEncoding.GetEncoding(28591)。ただし、このコード ポイント (U+00A5) については同じであると思います。UTF-7 は完全に異なります (使用したいものはほとんどありません)。

Encoding.Defaultは安全ではありません。ほとんどの場合、これは非常に悪い考えです。これは、実行している特定のコンピューターに固有のものです。あるコンピューターから別のコンピューターにファイルを転送する場合、元のコンピューターが使用していたエンコードを誰が知っていますか?

ファイルが ISO-8859-1 であることがわかっている場合は、それを明示的に使用してください。これらのファイルを生成しているのは何ですか? それらがユーザーによって保存されているだけの場合、どのプログラムで保存されていますか? UTF-8 がオプションである場合、それは良いものです - 一部には Unicode 全体に対応できるからです。

Unicode に関する記事と、役に立つと思われるUnicode の問題のデバッグに関する別の記事があります。

于 2008-12-16T09:39:24.107 に答える
2

既存のコードはエンコーディングを使用していません

エンコーディングが明示的に指定されていない可能性があります。その場合、エンコーディングはおそらくデフォルトでEncoding.UTF8になっています。

Encoding.Defaultという名前は、これがStreamReaderなどのクラスで使用されるデフォルトのエンコーディングであるという印象を与える可能性がありますが、そうではありません。JonSkeetが指摘したように、Encoding.Defaultはオペレーティングシステムの現在のANSIコードページのエンコーディングです。

個人的には、これによりプロパティ名Encoding.Defaultがやや誤解を招くようになると思います。

于 2008-12-16T10:04:34.867 に答える
1

あなたはソフトウェア開発者ですか?Joel Spolskyの絶対最小すべてのソフトウェア開発者を読むことを忘れないでください 絶対に、積極的にUnicodeと文字セットについて知っている必要があります(言い訳はありません!)

于 2008-12-16T10:21:30.090 に答える