2

私は、使用したい文字セットエンコーディングを指定することで、ファイルへの書き込みとファイルからの読み取りを可能にする Java プラグインに取り組んでいます。ただし、複数のエンコーディングを 1 つのファイルにエンコードする方法については混乱しました。たとえば、A 文字が 1 つの文字セットに由来し、B 文字が別の文字セットに由来すると仮定すると、「AAAABBBBBAAAAA」をファイルに書き込むことは可能でしょうか?

それが不可能な場合、これは一般的にどのプログラミング言語にも当てはまりますか、それとも特にJavaに当てはまりますか? 可能であれば、どうすればファイルを読み取る (デコードする) ことができますか?

Charset の encode() および decode() メソッドを使用したくないのは、それらを使用したテストが失敗したためです (一部の文字セットが正しくデコードされませんでした)。また、さまざまな理由でサードパーティのプログラムを使用したくないため、この質問の範囲は純粋に標準の Java パッケージ/コードにあります。

どうもありがとう!
NS

4

3 に答える 3

8

それをバイトストリームとして読み取り、文字の開始と終了のバイト位置を事前に知るか、文字グループの開始と終了を示す特別な区切り文字/バイト範囲を使用する必要があります。このようにして、特定の文字グループのバイトを取得し、最終的に目的の文字エンコーディングを使用してデコードできます。

この問題は Java に固有のものではありません。要件は奇妙です。このように文字エンコーディングを混在させることにどのような意味があるのだろうか。人類が認識している事実上すべての文字をサポートするUTF-8など、常に1つの統一されたエンコーディングを使用するだけです。

于 2012-05-14T13:26:38.323 に答える
1

もちろん、異なる文字セットでエンコードされたテキストを 1 つのファイルに書き込むことは原則として可能ですが、なぜこれを行う必要があるのでしょうか?

文字エンコーディングは、テキスト文字からバイトへ、またはその逆への単純なマッピングです。ファイルはバイトで構成されます。ファイルを書き込む場合、文字エンコーディングは文字をバイトに変換する方法を決定し、読み取る場合はバイトを文字に変換する方法を決定します。

ファイルの一部をある文字エンコーディングでエンコードし、別の部分を別の文字エンコーディングでエンコードすることができます。ファイルは自動的にそれを追跡しないため、どの部分がどのエンコーディングでエンコードされているかを追跡するためのメカニズムが必要です。

于 2012-05-14T13:29:25.810 に答える
0

私のクライアントがちょうど同様の質問をしたので、私もこれについて疑問に思っていました. BalusC が述べたように、これは Java 固有の問題ではありません。何度か行ったり来たりした後、本当の問題は、複数のエンコード ファイルではなく、「情報の複数のエンコード」である可能性があることがわかりました。つまり、xml 文字列テキストを 8859-1 でエンコードする必要があります。ファイルとして保存する場合は、エンコードする必要があります。xml のデフォルトのエンコーディングは UTF-8 です。xml 全体を 8859-1 としてエンコードする必要はないかもしれません。xml ノードは、他のシステムとコンテンツ (8859-1 で永続化する必要がある xml ノードの値) に情報を渡す手段にすぎないためです。この場合、複数のエンコードが必要ですか? おそらくそうではありません。xml を UTF-8 でエンコードしてから渡すこともできます。クライアントがxmlを受信すると、

于 2014-06-16T19:47:22.273 に答える