特殊字符和Java字符串

时间:2012-10-02 19:45:43

标签: java string control-characters

我有文本字符串(Java String),其中应包含'gerald.o'leary'

除此之外,它还包含一个控制角色'c2'。我已经包含了十六进制转储,请参阅image1.png以获取十六进制转储。

enter image description here

当我将它保存到数据库并通过在客户端中运行SQL并将其粘贴到十六进制编辑器中将其读回来时,我看到c2被3f替换,请参阅image2.png

enter image description here

我本可以忍受它,但是当使用String.equals()在Java中比较这两个字符串时,返回false。

有人可以解释一下这里发生了什么吗?!

2 个答案:

答案 0 :(得分:0)

我不知道你是如何得到十六进制转储的,但是java字符串是unicode字符串,因此字符和字节之间没有1:1的对应关系。我怀疑你的字符串包含unicode字符,这些字符不能用单个字节表示,你的字符处理(假设是这种情况)是错误的。

答案 1 :(得分:-1)

您是否检查过您的SQL DB是否可以存储UTF-8 / Unicode字符(即它不是ISO-8859-1,ASCII或类似字符)?

  • 首先将String输出到标准输出,看它是否真的包含正确的字符(?输出正常,但??或0xC2 0x92 ='不是)。
  • 然后检查数据库字符集。请参阅其手册。