什么是unicode字符首(U + 9996)以及java / mysql如何处理它及其朋友?

时间:2008-12-04 23:00:16

标签: java mysql eclipse unicode console

我有一个java字符串,其中包含unicode字符U + 9996(如果我执行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>下将控制台编码设置为UTF-8;通用
    • 我将-Dfile.encoding=UTF-8添加到JVM参数(默认为MacRoman)
    • 控制台(Eclipse和Terminal.app)现在显示正确的字符。万岁!
  • 我最感兴趣的是数据正确进入数据库,当然我想要全面了解这里发生了什么。
  • 我想我已修复了数据库问题。我忘了在连接上设置编码。现在我不明白为什么有些亚洲人物通过而不是其他人。
  • Phew,stackoverflow快速移动。很难跟上。谢谢大家。

3 个答案:

答案 0 :(得分:2)

您是否确认存储在数据库中的值实际上是U + 003f(问号)?有关如何显示所选字体中不存在的字符并将其显示为?'的各种约定?很常见。

所以最有可能的是,角色被正确存储,无论出于何种原因,只会显示为“?”。基本上,忽略它的呈现方式,并查看在数据库中存储的代码点。是U + 9996还是U + 003f(还是完全不同的东西)? 不要盲目地认为只是因为它被渲染为问号,它实际上是一个存储在数据库中的问号。

答案 1 :(得分:0)

我不知道这些问题,但它是definitely a valid Unicode character(自从Unicode 1.1开始)。

答案 2 :(得分:0)

  1. 这是运行什么O / S?
  2. 什么是控制台应用程序,即(xterm,cmd.exe等?)
  3. 控制台应用程序是否设置为UTF-8输出?
  4. 关于上面的3,这可能是重要的一个,我看过类似的问题,例如PuTTY与Linux机器人交谈,其中Linux盒子认为我使用的是UTF-8,但PuTTY会话本身设置为ISO-Latin-1(8859-1)