Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unicode字符首;(U+;9996)以及java/mysql如何处理它和它的朋友?_Java_Mysql_Eclipse_Unicode_Console - Fatal编程技术网

unicode字符首;(U+;9996)以及java/mysql如何处理它和它的朋友?

unicode字符首;(U+;9996)以及java/mysql如何处理它和它的朋友?,java,mysql,eclipse,unicode,console,Java,Mysql,Eclipse,Unicode,Console,我有一个java字符串,其中包含unicode字符U+9996(如果我使用codePointAt(),这就是我得到的) 如果我在调试器表达式面板(在eclipse中)中查看它,那么一切都很好,它看起来像“首”。但是,如果我将其打印到控制台,我只会得到“?”。这似乎不是字体的问题,因为我尝试了不同的设置 我真正的问题是,我试图将字符串放入MySQL数据库(使用utf8编码)。许多其他宽字符在db中显示得很好,但同样,这一个和其他一些类似的字符显示为“?”。所有这些让我相信问题出在java方面 在追

我有一个java字符串,其中包含unicode字符U+9996(如果我使用codePointAt(),这就是我得到的)

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

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

在追踪这个bug的过程中,我学到了一些关于和java.text的知识。这看起来可能与本案有关。我知道U+9996是U+2FB8的标准版本。U+2FB8在显示方面与上面的问题完全相同,但无论如何,我为什么要转换为非规范表示(即使我可以,但我认为我不能)

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


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

我不知道这些问题,但它确实存在(而且从Unicode 1.1开始就存在)

  • 这是在什么操作系统上运行的
  • ie(xterm、cmd.exe等)是什么控制台应用程序
  • 控制台应用程序是否设置为UTF-8输出

  • 关于上面的3,这可能是最重要的一个,我看到过类似的问题,例如使用PuTTY与Linux box对话,Linux box认为我在UTF-8上,但PuTTY会话本身被设置为ISO-Latin-1(8859-1)

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

    因此,最有可能的情况是,字符被正确存储,并且出于任何原因,只显示为“?”。基本上,忽略它是如何呈现的,看看数据库中存储了什么代码点。它是U+9996还是U+003f(或者完全是别的什么)?
    不要盲目地认为,仅仅因为它被呈现为问号,它实际上就是存储在数据库中的问号。

    U+9996是一个完全有效的字符,它是一个汉字。如果您使用的是Windows,那么将Unicode字符写入控制台的唯一方法就是WriteConsoleW:Java的源代码(OpenJDK 6)不包含对WriteConsole的引用,因此从Java向控制台写入Unicode字符是不可能的。不过,正如其他海报所说,字符仍然有效,只是始终显示为?在控制台上。好的,我看到你在Mac上。好的,上面的评论可以留给其他读者,但如果其他人不抢先一步,我会给你的评论写一个答案。:-)罗文,你解决过这个问题吗?我有一个类似的问题,但有更普通的符号,如欧元和英镑等。如何验证数据库中的值是否正确?我没有看到显示代码点的SQL函数。请使用java函数将其读回并在该点进行验证。
    从来都不是显示问题。方形框(或奇怪的空格)是(这意味着所有人都知道如何处理Unicode,但没有找到包含该字符的字体)。但是,如果使用问号或U+FFFD替换字符,您永远不会看到渲染问题,而是后端的转换问题(或格式错误的输入)。在Eclipse中,您可以为控制台设置加密,请查看首选项。