You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:10:35