Eclipse详细信息格式化程序字符串未显示所有Unicode字符

时间:2018-06-23 09:31:10

标签: java eclipse jdb

我喜欢在调试器中看到剪贴板符号:(U + 1F4CB)。

我了解两个代码点。 enter image description here

注意:

  • \ ud83d是ߓ
  • \ u8dccb是

我想详细格式化以在Unicode的debug-tooltip中看到它。

我当前的详细信息格式化程序(Preferences-> Java-Debug-> Detail Formatter)是:

    @Query("MATCH (r) " 
      + " WHERE id(r)={0}"
      + " SET n.yourProperty={1}"
      + " RETURN id(r)")
  public long updateRelationShip(long id, String value);

(上面的代码只不过在细节视图中添加了scrollViewStyle: { position: 'absolute', paddingTop: 60, marginTop: 0 , height: 300 // <---- }, 而已。

问题1:

我需要哪种格式化程序才能在黄色的工具提示中看到正确显示的字符?

来源

new String(this.getBytes("utf8"), java.nio.charset.Charset.forName("utf8")).concat(" <---")

2 个答案:

答案 0 :(得分:3)

“”字符已在Unicode字符集中定义,并且由于String实例是Unicode字符序列,因此它们可能包含该字符。但是它位于基本多语言平面之外,因此对其进行软件处理必须更加小心。最值得注意的是,它不得尝试将其处理为单个char值(UTF-16单位),而需要处理诸如一对替代字符之类的字符。

您的详细信息格式化程序指定为

new String(this.getBytes("utf8"), java.nio.charset.Charset.forName("utf8")) …

在这里无济于事,因为this.getBytes("utf8")将Unicode String实例转换为byte[]编码的UTF-8数组,然后将其传递给{{1 }}构造函数,将字节数组转换回相同的new String(…, Charset.forName("utf8"))实例。如果Eclipse的调试器无法呈现原始字符串,则在执行该冗余操作后,突然不会使用相同的字符串正确地进行处理。

通常,如果Eclipse的调试器无法在基本多语言平面之外正确呈现包含字符的字符串,则您无法在Detail Formatter中进行任何操作来解决此问题,因为您将在那里进行的所有处理最终都将以String,也许是在应用了一系列详细信息格式化程序之后。因此,最终结果只能是以下两种选择之一:String(除去有问题的字符)或String(Eclipse的调试器无法正确呈现)。

换句话说,这是一个只能在Eclipse方面修复的错误。

答案 1 :(得分:0)

您的代码和the clipboard emoji 在IntelliJ 2018.1中可以正常工作。调试器的变量视图和控制台输出均正常工作。

这不太可能是代码问题。也许是您在Eclipse中使用的字体无法打印出UTF表情符号?我以为Eclipse在显示工具提示时会理解代码点的概念。

我在IntelliJ中执行的代码:

byte[] db = new byte[] { -16, -97, -109, -117 };
String x = new String(db, Charset.forName("utf8"));
System.out.println(x);
String f = new String(x.getBytes("utf8"), Charset.forName("utf8")).concat(" <---");
System.out.println(f);

并在调试器中观察到以下内容:

enter image description here