java - unicode字符首(U+9996)是怎么处理的,java/mysql是如何处理它和它的 friend 的?

标签 java mysql eclipse unicode console

我有一个包含 unicode 字符 U+9996 的 java 字符串(这就是我执行 codePointAt() 时得到的结果)。

如果我在调试器表达式面板(在 eclipse 中)中查看它,那么一切都很好,它看起来像“首页”。但是,如果我将它打印到控制台,我只会得到“?”。问题似乎不是字体,因为我尝试过不同的设置。

我真正的问题是我试图将字符串放入 MySQL 数据库(使用 utf8 编码)。许多其他宽字符在数据库中显示良好,但同样,这个和其他一些类似的字符显示为“?”。所有这些让我相信问题出在 Java 方面。

在追查这个错误的过程中,我对 Unicode Normalization 有了一些了解。和java.text。 Normalizer这看起来在这种情况下可能是相关的。我了解到 U+9996 是 U+2FB8 的规范版本。 U+2FB8 在显示方面存在与上述完全相同的问题,无论如何我为什么要转换为非规范表示(即使我可以,但我认为我不能)?

无论如何,我发现了一个我一直无法理解的潜在线索。 This page包含“U+9996 不是有效的 unicode 字符”字样,没有进一步解释。然后继续展示如何在各种 unicode 编码中对这个假定无效的 unicode 字符进行编码。所以我的问题基本上是:WTF?


更新

  • 我在使用 Mac。
  • 我说的是 Eclipse 控制台。
    • 我在 Run > Common 下将控制台编码设置为 UTF-8
    • 我将 -Dfile.encoding=UTF-8 添加到 JVM 参数(默认为 MacRoman)
    • 控制台(Eclipse 和 Terminal.app)现在显示正确的字符。万岁!
  • 我最感兴趣的是数据如何正确地进入数据库,当然我想全面了解这里发生的事情。
  • 我想我已经解决了数据库问题。我忘记在连接 上设置编码。现在我不明白为什么有些亚洲角色能通过而不是其他人。
  • 呸,stackoverflow 发展很快。很难跟上。谢谢大家。

最佳答案

您是否已验证存储在数据库中的值实际上是 U+003f(问号)?对于如何显示所选字体中不存在的字符,以及如何将它们显示为 ?',有各种约定。相当普遍。

很可能,字符被正确存储,并且出于某种原因,简单地显示为“?”。基本上,忽略它是如何呈现的,并查看数据库中存储的代码点。是 U+9996 还是 U+003f(或完全不同的东西)? 不要盲目地假设仅仅因为它呈现为一个问号,它实际上是一个存储在数据库中的问号。

关于java - unicode字符首(U+9996)是怎么处理的,java/mysql是如何处理它和它的 friend 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/342392/

相关文章:

mysql - JPA EclipseLink oneToMany 派生 ID 失败

android - 没有找到 android :elevation 的资源标识符

java - 如何运行 Java .class 文件?

MySql varchar字段比较两个不同表的内容为 "`“

mysql - 为什么在正确的方法之后读取并不能产生一致的结果?

java - 为什么eclipse高亮java行?

eclipse - 设置所有 Eclipse 工作区的首选项

java - J2ME图像旋转

java - 事务注释不同的行为

用于两个之间语义相似性/相关性的 Java API "WORDS"