我有算法将给定的 unicode字符串转换为其他形式。用户必须通过TextArea
提供此 unicode字符串。这个unicode字符串包含
(\ u0004)将按算法处理的字符;
但问题是,当粘贴到javafx中的TextArea时,字符串会转换为
aaa
。见下图
当我使用.Net框架时,这不是问题。 .Net Framework的TextArea
正确显示,如下图所示
知道如何解决这个问题吗?
答案 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