0

我有应该包含的文本字符串(Java 字符串)'gerald.o'leary'

实际上,除了其余的“c2”之外,它还包含一个控制字符。我已经包含了十六进制转储,请参阅image1.png十六进制转储。

在此处输入图像描述

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

在此处输入图像描述

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

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

4

2 回答 2

0

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

于 2012-10-02T19:54:36.280 回答
-1

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

  • 首先将 String 输出到标准输出,看看它是否真的包含正确的字符(? 在输出中很好,但 ?? 或 0xC2 0x92 = ´ 不是)。
  • 然后检查您的数据库字符集。见其手册。
于 2012-10-02T19:55:39.613 回答