-1

このテキストファイルには、JVMのデフォルトの文字セットであるLatin1文字セットにサポートされていない文字が含まれている可能性があります。

私のJavaプログラムがファイルから読み込もうとすると、これらの文字は何に変わりますか?具体的には、ファイルに2バイトの長さの文字が含まれているとすると、1バイトの文字として読み取られますか(Latin1の各文字の長さは1バイトしかないため)。

ありがとう、

4

3 に答える 3

3

ファイルはLatin1で読み取る必要があるため、InputStreaReaderオプションを使用できません。

Latin1文字セットでサポートされていない文字が含まれている可能性のあるこのテキストファイルがあります...

ここには矛盾する要件があります。

ファイルがLATIN-1(および「サポートされていない文字」がない)であるか、LATIN-1ではありません。LATIN-1でない場合は、実際にどの文字セット/エンコーディングであるかを調べ、LATIN-1の代わりにそれを使用してファイルを読み取る必要があります。

他の回答/コメントで説明されているように、JVMのデフォルトの文字セットを変更するか、を開いたときに文字セットを明示的に指定することができますReader

JVMのデフォルトの文字セットを設定するのに問題があります。

何をしようとしているのか、どのような問題を抱えているのかを説明してください。

(そしてそれを台無しにすることを少し恐れていました!)

腰抜け!:-)


FWIW-(たとえば)LATIN-1でデータストリームを読み取ろうとして、データストリームが実際にはLATIN-1にない場合は、次のことが予想されます。

  • LATIN-1で同じものをエンコードする文字と実際の文字セットは、無傷で渡されます。
  • 同じ文字をエンコードしない文字は、「不明な文字」を意味する文字(疑問符など)に置き換えられるか、文字化けします。どちらが発生するかは、問題のバイトまたはバイトシーケンスが有効な(ただし間違った)文字をエンコードするか、文字をまったくエンコードしないかによって異なります。

最終的な結果は、部分的に文字化けしたテキストになります。文字化けは、実際の文字セットと文字が正確に何であるかに応じて、元に戻すことができる場合とできない場合があります。ただし、最初にデコードするためにRIGHT文字セットを使用することにより、「そこに行く」ことを避けるのが最善です。

于 2012-06-04T23:02:24.777 に答える
1

まず、ファイルを読み取るときに使用する文字セットを指定できます。例を参照してください:java.io.InputStreamReader

第二に。はい、1バイトの文字セットを使用して読み取る場合、各バイトは1文字にマップするために使用されます。

第三に:それをテストすれば、間違いなく実際に何が起こるかがわかるでしょう!

于 2012-06-04T22:48:17.717 に答える
0

文字セットがわからない場合は、推測する必要があります。これはトリッキーでエラーが発生しやすいです。

この問題に関する質問は次のとおり です。テキストファイルのエンコーディング/コードページを検出するにはどうすればよいですか。

メモ帳をだまして間違った推測をさせる方法を確認してください。

于 2012-06-05T02:45:42.560 に答える