2012-10-02 201 views
0

我有文本字符串(Java String),它應該包含'gerald.o'leary'特殊字符和Java字符串

實際上,除了'c2'以外,它還包含一個控制字符。我已經包含了十六進制轉儲,請參閱image1.png瞭解十六進制轉儲。

enter image description here

當我將它保存到數據庫,並通過運行在客戶端SQL讀出來,並複製粘貼到一個十六進制編輯器我看到C2的更換3F,請參閱image2.png

enter image description here

我可以住在一起,但一個事實,當這兩個字符串在Java中使用String.equals(相比),返回false。

請問有人能解釋一下這裏發生了什麼?

+0

實際上'c2 92'正在被'3f'取代。兩個字節減少到一個非常清楚這是一個編碼問題的地方。 – mellamokb

+0

http://www.fileformat.info/info/unicode/char/92/index.htm –

+0

你有一個字符編碼問題。我猜測原文包含了一個智能報價。那些文本是如何進入你的Java字符串的?它是否以網頁的形式輸入? –

回答

-1

您是否檢查SQL DB是否可以存儲UTF-8/Unicode字符(即不是ISO-8859-1,ASCII或類似的)?

  • 首先將字符串輸出到標準輸出以查看它是否確實包含正確的字符(?在輸出中是正確的,但是?或0xC2 0x92 ='不是)。
  • 然後檢查你的數據庫字符集。請參閱其手冊。
+0

我正在使用SQLServer 2008,不知道它的字符集,將檢查。 – kmansoor

0

我不知道如何得到十六進制轉儲,但java字符串是unicode字符串,因此字符和字節之間沒有1:1的對應關係。我懷疑你的字符串包含不能用單個字節表示的unicode字符,並且你的字符處理(假定情況是這樣的)是錯誤的。