2 回答
![?](http://img1.sycdn.imooc.com/545865da00012e6402200220-100-100.jpg)
TA贡献1843条经验 获得超7个赞
“?”字符已在Unicode字符集中定义,并且由于String
实例是Unicode字符序列,因此它们可能包含该字符。但是它位于基本多语言平面之外,因此对其进行软件处理必须更加小心。最值得注意的是,它不得尝试将其作为char
UTF-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方面解决的错误。
![?](http://img1.sycdn.imooc.com/5333a2320001acdd02000200-100-100.jpg)
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);
并在调试器中观察到以下内容:
添加回答
举报