12

我想在 JavaFX 中添加 UTF-8 波斯语字符,但是当我添加带有波斯语内容的标签时,它会显示一些奇怪的结果。

我是否必须使用特定的插件或配置来处理此问题?

4

5 回答 5

6

波斯语是从右到左吗?

在这种情况下,您想使用支持 RTL的 JavaFX 版本。那将是 JavaFX 8(包含在 JDK8 中)。这里有一个预览。

确保您已加载并正在使用包含波斯字符字形的字体。

这是一些示例 JavaFX 代码(复制自 Oracle JavaFX 教程),用于显示在我看来像波斯脚本的内容。

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

public class JavaFXBidiText extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        TextFlow textFlow = new TextFlow();
        Font font = new Font("Tahoma", 48);
        
        Text text1 = new Text("He said \u0627\u0644\u0633\u0644\u0627\u0645");
        text1.setFill(Color.RED);
        text1.setFont(font);
        Text text2 = new Text(" \u0639\u0644\u064a\u0643\u0645 to me.");
        text2.setFill(Color.BLUE);
        text2.setFont(font);
        textFlow.getChildren().addAll(text1, text2);
 
        Group group = new Group(textFlow);
        Scene scene = new Scene(group, 650, 150, Color.WHITE);
        stage.setTitle("Hello Bidi Text");
        stage.setScene(scene);
        stage.show();
    }
}

图片

关于使用和解释正确字符编码的这个问题和答案的其他评论也是有效的,所以这个答案并不完全权威。

如果源文件是 ascii 编码的,那么您可以使用这些\u值来表示非 ascii 字符的 unicode 值,如上例所示。

我认为(虽然我没有尝试过),如果源文件(.java类的文件或资源的属性文件)是 UTF-8 编码的(它必须保存为 UTF-8 编码,而不是另一个字符集,例如在 Intellij IDEA 编辑器中设置文件编码)然后您可以直接将 unicode 类型的字符放入字符串中,就像您在不使用/u编码的情况下使用普通 ASCII 字符一样。如果这样做,则必须将编译器或构建工具配置为使用 UTF-8 编码文件。例如,使用 Maven:如何在 Maven 中配置编码?

于 2012-12-31T17:45:17.623 回答
4

如果您使用的是 ResourceBundle,请确保它以正确的编码读取属性文件。

如何通过 ResourceBundle 在资源属性中使用 UTF-8

于 2013-05-20T20:54:54.403 回答
2

很可能您的问题与 JavaFX 无关,而是与一些编码混乱有关。Java 自古以来就完全支持 UTF-8(不是一组语言,而是一种 Unicode 字符集编码)。帮自己一个忙,花几个小时消化这个

于 2012-12-30T13:21:33.163 回答
2

我遇到了同样的问题,答案是我的源代码文件的文件编码不是 UTF8(我使用的是 intellijidea 14)我将它们转换为 UTF8 并且它有效。

于 2015-03-31T10:35:44.917 回答
0

只需?useUnicode=true&characterEncoding=utf8在连接网址后添加

会是这样

jdbc:mysql://localhost:port/dataBaseName?useUnicode=true&characterEncoding=utf8
于 2018-11-04T18:37:49.570 回答