2012-10-02 259 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字符,并且你的字符处理(假定情况是这样的)是错误的。