为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2021-04-07 13:11:50
我喜欢在调试器中看到剪贴板符号:?(U + 1F4CB)。我了解这两个代码点。喉音:\ ud83d是ߓ\ u8dccb是我想详细格式化以在Unicode的debug-tooltip中看到它。我当前的详细信息格式化程序(Preferences-> Java-Debug-> Detail Formatter)是:new String(this.getBytes("utf8"), java.nio.charset.Charset.forName("utf8")).concat(" <---")(上面的代码只不过<---在详细视图中添加了a )问题1:我需要哪种格式化程序才能在黄色的工具提示中看到正确显示的字符?来源import java.nio.charset.Charset;public class Test {     public static void main(String[] args) {                    byte[] db = new byte[] { -16, -97, -109, -117 };         String x = new String(db, Charset.forName("utf8"));         System.out.println(x);         return;     }}
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

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

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

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

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

通常,如果Eclipse的调试器无法在基本多语言平面之外正确呈现包含字符的字符串,则您无法在Detail Formatter中进行任何操作来解决此问题,因为您将在那里进行的所有处理最终都将最终以a结束String,应用细节格式化程序链。因此,最终结果只能是两个选择之一,一个String是删除有问题的字符,另一个String是Eclipse的调试器无法正确呈现。

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


查看完整回答
反对 回复 2021-04-21
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您的代码和剪贴板表情符号in在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);

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

//img1.sycdn.imooc.com//607fc93d00015a3a02430180.jpg

查看完整回答
反对 回复 2021-04-21
  • 2 回答
  • 0 关注
  • 273 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信