如何在 JavaFX 中显示控制字符 Unicode?
How to show control characters Unicode in JavaFX?
我正在使用 javafx 11 和 jdk 8 制作一个程序,您可以在文本区域中编写一些内容,它会对该文本执行一些操作,然后它会向您显示结果。
问题是我想粘贴一些unicode的特殊字符,比如"U+0011 : DEVICE CONTROL ONE [DC1]"但是当我粘贴到输入文本区域时它不会出现。
有没有什么办法可以让这些字符出现并被使用?
这些字符出现在 notepad++ 中,如下所示:
JavaFX 似乎在插入文本之前剥离控制字符。
不能直接显示字符,但是Unicode有一个字符块专门用来显示控制字符:Control Pictures.
因此,显示角色的视觉表示非常简单:
char charToDisplay = (c >= 32 || c == '\n' ? c : (char) (c + 0x2400));
您可以相当轻松地转换任何字符串:
static String makeControlCharactersVisible(String s) {
if (s == null) {
return s;
}
int len = s.length();
StringBuilder visible = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
visible.append(c >= 32 || c == '\n' ? c : (char) (c + 0x2400));
}
return visible.toString();
}
在JavaFX文本组件中,可以拦截粘贴:
TextArea textArea = new TextArea() {
@Override
public void paste() {
String text = Clipboard.getSystemClipboard().getString();
replaceSelection(makeControlCharactersVisible(text));
}
};
这样做有两个缺点:
- 大多数字体的控制图片字符字形都很糟糕,在 12 点等正常字体大小下几乎不可读。
- 可以想象,用户可能想要实际粘贴一个控制图片字符,在这种情况下将无法知道他们粘贴的是
'\u0011'
还是'\u2411'
。
我正在使用 javafx 11 和 jdk 8 制作一个程序,您可以在文本区域中编写一些内容,它会对该文本执行一些操作,然后它会向您显示结果。
问题是我想粘贴一些unicode的特殊字符,比如"U+0011 : DEVICE CONTROL ONE [DC1]"但是当我粘贴到输入文本区域时它不会出现。
有没有什么办法可以让这些字符出现并被使用?
这些字符出现在 notepad++ 中,如下所示:
JavaFX 似乎在插入文本之前剥离控制字符。
不能直接显示字符,但是Unicode有一个字符块专门用来显示控制字符:Control Pictures.
因此,显示角色的视觉表示非常简单:
char charToDisplay = (c >= 32 || c == '\n' ? c : (char) (c + 0x2400));
您可以相当轻松地转换任何字符串:
static String makeControlCharactersVisible(String s) {
if (s == null) {
return s;
}
int len = s.length();
StringBuilder visible = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
visible.append(c >= 32 || c == '\n' ? c : (char) (c + 0x2400));
}
return visible.toString();
}
在JavaFX文本组件中,可以拦截粘贴:
TextArea textArea = new TextArea() {
@Override
public void paste() {
String text = Clipboard.getSystemClipboard().getString();
replaceSelection(makeControlCharactersVisible(text));
}
};
这样做有两个缺点:
- 大多数字体的控制图片字符字形都很糟糕,在 12 点等正常字体大小下几乎不可读。
- 可以想象,用户可能想要实际粘贴一个控制图片字符,在这种情况下将无法知道他们粘贴的是
'\u0011'
还是'\u2411'
。