0

を含むテキスト文字列 (Java 文字列) があります'gerald.o'leary'

実際には、残りの 'c2' に加えて制御文字が含まれています。16 進ダンプを含めました。16 進ダンプについては、を参照image1.pngしてください。

ここに画像の説明を入力

データベースに保存し、クライアントで SQL を実行して読み返し、16 進エディタにコピーして貼り付けると、c2 が 3f に置き換えられていることがわかりますimage2.png

ここに画像の説明を入力

私はそれを受け入れることもできましたが、これら 2 つの文字列が String.equals() を使用して Java で比較されると、false が返されます。

誰かがここで何が起こっているのか説明できますか?!

4

2 に答える 2

0

どのようにして 16 進ダンプを取得したのかはわかりませんが、Java 文字列は Unicode 文字列であるため、文字とバイトの間に 1:1 の対応はありません。あなたの文字列には、1 バイトで表現できない Unicode 文字が含まれていると思われます。また、文字処理 (これが当てはまると想定しています) にバグがあります。

于 2012-10-02T19:54:36.280 に答える
-1

SQL DB が UTF-8/Unicode 文字を格納できるかどうか (つまり、ISO-8859-1、ASCII などではない) を確認しましたか?

  • 最初に文字列を標準出力に出力して、本当に正しい文字が含まれているかどうかを確認します (? は出力に問題ありませんが、?? または 0xC2 0x92 = ´ はそうではありません)。
  • 次に、データベースの文字セットを確認します。そのマニュアルを参照してください。
于 2012-10-02T19:55:39.613 に答える