为什么unicode character \ u0004没有在Javafx TextArea中显示

时间:2018-05-06 12:18:13

标签: java javafx-8

我有算法将给定的 unicode字符串转换为其他形式。用户必须通过TextArea提供此 unicode字符串。这个unicode字符串包含 enter image description here(\ u0004)将按算法处理的字符;

示例字符串:enter image description here

但问题是,当粘贴到javafx中的TextArea时,字符串enter image description here会转换为aaa。见下图

enter image description here

当我使用.Net框架时,这不是问题。 .Net Framework的TextArea正确显示,如下图所示 enter image description here

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我刚检查了替换实际发生的位置。它位于TextArea.TextAreaContent类中,遗憾的是它不能被自定义实现替换,因为它是为TextArea的每个构造函数传递的(至少没有反射或自定义类加载器)。

您可以通过将文本替换为TextFormatter中正确呈现的文本来应用变通方法。如果您需要跟踪“真实”文本,您还可以使用TextFormatter记录更改并覆盖TextArea的{​​{1}}方法,将相应的内容复制到剪贴板。

copy

请注意,JavaFX还会删除所有其他字符&lt; textArea.setTextFormatter(new TextFormatter<String>(change -> { String text = change.getText(); if (!text.isEmpty()) { change.setText(text.replace('\u0004', '\u02e9')); // replace eot char with "valid" one } return change; })); 没有接受特殊处理。

答案 1 :(得分:0)

这不会解决您的问题,但它可以帮助您诊断问题并可能解决它。我写了一个名为MgntUtils的开源库,它有几个实用程序。它们的Ome将任何String转换为Unicode序列,反之亦然。例如,你可以做

StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Hello World")

并获得&#34; \ u0065 \ u0065 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006结果。方法 StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString( "\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064");

会做相反的操作。你可以做的是从你的文本区域复制你的字符串并将其转换为unicodes。然后你可以看到它是否包含你所讨论的unicodes并且只是没有显示它们或者它们不包含在String中(即被过滤掉)。这可能会给你一个良好的开端。以下是文章的链接,该文章解释了MgntUtils库以及在何处获取它(作为maven工件或github),在这两种情况下都附带了源代码和java doc。查找名为&#34; String Unicode converter&#34;的段落。 MgntUtils