0

日本語のように表現に1バイト以上かかる国際文字を保存すると、UTF-8でデータを読み戻すときにデータが失われますか?

つまり、UTF-8を使用する場合、1文字を節約するために2バイトを使用します。そして、私がバイトを読んでいる間、私は2番目のバイトを読む前に最初のバイトを読むかもしれません、そしてその場合それは完全に異なる文字またはぎこちないものを示しますか?

これらの国際文字を保存して、エンコードやデコードを使用せずに読み取る方法はありますか?

4

2 に答える 2

2

UTF-8はまさにあなたが必要としているものです。http://en.wikipedia.org/wiki/UTF-8をお読みください。

于 2012-12-29T03:42:54.147 に答える
2

日本語のように表現に1バイト以上かかる国際文字を保存すると、UTF-8でデータを読み戻すときにデータが失われますか?

いいえ。ファイルを正しく書き込んだり読んだりすれば、データが失われることはありません。

また、テキストを正しく読み書きする簡単な方法はWriterReaderAPIを使用して、ライター/リーダーインスタンスを作成するときにエンコーディングを明示的に指定するか(InputStreamReader / OutputStreamWriterを使用するなど)、FileReader/FileWriterを使用してデフォルトのプラットフォームエンコーディングに依存することです。Java実装は、明示的または暗黙的に選択されたエンコード方式に基づいて、char<->バイトのエンコードとデコードを処理します。

つまり、UTF-8を使用する場合、1文字を節約するために2バイトを使用します。

char実際には、Javaの値に応じて、1、2、または3バイトです。

そして、私がバイトを読んでいる間、私は2番目のバイトを読む前に最初のバイトを読むかもしれません、そしてその場合それは完全に異なる文字またはぎこちないものを示しますか?

UTF-8を正しくデコードしないと(つまり、仕様に従って)、あらゆる種類のガベージが発生する可能性があります。しかし、とにかくそれを手でデコードしようとしてはいけません。ReaderとWriterのAPIを使用すると、Javaがすべての処理を行います。

これらの国際文字を保存して、エンコードやデコードを使用せずに読み取る方法はありますか?

これは意味がありません。Javaからファイルに文字を書き込むときはいつでも、暗黙的にそれらをエンコードしています...エンコードが恒等変換(UTF-16など)であっても

于 2012-12-29T03:46:26.000 に答える