4

Z/OS DB2 データベースに 'N Tilde' 文字があります。データからxmlファイルを生成しています。しかし、私が持っている XML ではencoding=UTF-8、Internet Explorer でエラーが表示されますIllegal character in text field。エンコーディングを ISO-8859-1 に変更すると、正常に動作します。

ISO-8859-1 は UTF-8 のサブセットだと思っていたのに、なぜ UTF-8 で動作しないのですか?

XML ドキュメントには UTF-8 が最適ですか?

4

4 に答える 4

9

ISO-8859-1 はUTF-8 のサブセットではありません。UTF-8 で表現可能な文字のサブセットを表現できますが、同じ方法では表現できません。

ISO-8859-1 と UTF-8 はどちらも ASCII のスーパーセットです (つまり、ASCII で表現できるすべての文字を表現でき、同じ方法で表現できます)。

したがって、ISO-8859-1 データを UTF-8 としてラベル付けして、それが機能することを期待することはできません。実際にデータを UTF-8 として保存 (または変換) する必要があります。

于 2011-02-23T15:16:11.013 に答える
2

UTF-8≠Unicode

注意してください:

  • ASCIIはISO8859-1のサブセットです。
  • ASCIIはUnicodeのサブセットです。
  • ASCIIはUTF-8のサブセットです。
  • ISO8859-1Unicodeのサブセットです。
  • ISO8859-1はUTF-8のサブセットではありません。
  • UnicodeはUTF-8と同じものではありません。

現代の用語の微妙な点に精通することを強くお勧めします。

それがあまりにも紛らわしい場合は、Radix-50を見てください。これは、Unicodeよりも数桁小さいレパートリーを持っていますが、それでも、Unicode、文字レパートリー、コード化された文字セットに関して人々を逃れる同じ微妙な点のいくつかを示しています。文字エンコード形式、および文字エンコードスキーム。

chars文字を保持できないJava

あなたはJavaからこれに来ているので、これらがあなたの心の中で明確に分離された概念ではないことは本当にあなたのせいではありません。これは、Javaが、コード化された文字セットのabstactコードポイント(論理文字)を、特定の文字エンコード形式のダウンアンドダーティメカニズムから分離しないことによって、これらの問題を深刻に混乱させているためです。

Javaの論理文字との悲惨な混同はchars、非常にエラーが発生しやすいものです。おそらく、Javaプログラマーが同じことを混同しているのは悲惨だと言った方が正確でしょう。いずれにせよ、今までに救済の希望はないようです。

必要に応じて、ヒステリックなネズミイルカのせいにしますが、それについて言える最も慈善的なことは、それが非常に残念であるということです。これらすべてのために、あなたのような善意のある完全に有能なプログラマーは、永遠に簡単に混乱するでしょう。そのため、単純で、明確で、間違ったJavaコードを継続的に記述します。

これらすべてについての教育は唯一の可能な緩和策ですが、それは本当の治療法ではありません。

于 2011-02-23T15:41:25.157 に答える
1

ISO-8859-1 は UTF-8 のサブセットではありません。ASCII は、ISO-8859-1UTF-8 の両方のサブセットです。これらは、U+0080 ~ U+00FF の Unicode コード ポイント範囲の文字で明確に異なります。

ISO-8859-1 では、文字「Ñ」 (U+00D1 LATIN CAPITAL LETTER N WITH TILDE) は 1 バイトとして表されますD1。UTF-8 では、同じ文字が 2 バイト シーケンスで表されますC3 91

于 2011-02-23T15:20:00.597 に答える
0

Java で XML を生成するには、XML ライブラリを使用するのが最善の方法です。これにより、すべてが整形式になります。

手動で作成する必要がある場合は、 を使用することnew OutputStreamWriter(stream, encoding)をお勧めします。ここで、エンコーディングは、XML プリアンブルに記述しているエンコーディングと同じです。

また、データベースから取得した文字列が正しい方法でエンコードされていることを確認してください。

于 2011-02-23T19:23:29.633 に答える