JavaFX中如何将文件读取的字符串转为Unicode实体并在Text控件显示?
JavaFX读取文件中的Unicode十六进制字符串并显示对应字符
直接在文件里写转义字符串没用,因为Java读取文件时会把\ue13a当成普通字符序列处理,不会自动解析成对应Unicode字符。你需要手动把文件里的十六进制字符串(比如e13a)转换成对应字符,具体实现如下:
实现步骤
- 读取并清理文件内容:读出文件中的十六进制字符串,去掉多余的引号、换行符、空格等无关内容。
- 十六进制转Unicode字符:将清理后的十六进制字符串转为整数,再转换成对应的字符序列(支持Unicode补充平面的多字节字符)。
- 绑定到Text组件:把转换后的字符序列赋值给Text的
text属性完成显示。
代码示例
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Text; import javafx.scene.layout.VBox; import javafx.stage.Stage; import java.nio.file.Files; import java.nio.file.Paths; public class UnicodeDisplayApp extends Application { @Override public void start(Stage stage) { Text displayText = new Text(); VBox root = new VBox(displayText); Scene scene = new Scene(root, 300, 200); stage.setScene(scene); stage.show(); try { // 读取文件内容,处理带引号或不带引号的情况 String hexStr = Files.readString(Paths.get("unicode.txt")) .trim() .replace("\"", ""); // 处理带U+/u+前缀的情况(比如U+E13A) hexStr = hexStr.replace("U+", "").replace("u+", ""); // 十六进制转Unicode码点 int codePoint = Integer.parseInt(hexStr, 16); // 转成字符序列(支持代理对类型的字符) char[] chars = Character.toChars(codePoint); // 设置到Text组件 displayText.setText(new String(chars)); } catch (Exception e) { displayText.setText("处理出错:" + e.getMessage()); e.printStackTrace(); } } public static void main(String[] args) { launch(args); } }
补充说明
- 用
Character.toChars()而非直接强转char,是因为部分Unicode字符(如emoji)由两个char组成代理对,这个方法能正确解析这类字符。 - 如果文件中每行存一个十六进制字符串,只需循环读取每行并重复转换逻辑即可。
内容的提问来源于stack exchange,提问作者Marco Defina
相关产品推荐
相关产品推荐

