为什么JavaFX会显示一些控制字符?

时间:2018-01-19 08:41:52

标签: java javafx unicode fonts

我注意到JavaFX,JDK 1.8.0_131将Windows(7)上的控制字符显示为不同的符号。

以下是字符128-159显示的符号: Here are the symbols displayed for characters 128-159

Pasting this to IntelliJ sees a similar result,所以它似乎是Font,但我无法在非Java应用程序中使用Courier New重现同样的事情:

为什么会发生这种情况?如何更改此行为?

重现:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class ControlCharsJavaFx extends Application {

    public static void main(String[] args) {
        ControlCharsJavaFx.launch(ControlCharsJavaFx.class);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        TextField textfield = new TextField();
        textfield.setStyle("-fx-font-size: 500%");
        for (int i = 128; i <= 159; i++) {
            textfield.setText(textfield.getText() + (char) i);
        }
        Scene test = new Scene(textfield);
        primaryStage.setScene(test);
        primaryStage.show();
    }
}

2 个答案:

答案 0 :(得分:0)

Ascii仅定义128个字符,即单词的前7位。在128以上,开发人员看到了使用这些&#34;空的&#34;更有用的字符。但是,thousands of developers had this same idea without any real standardization。因此,您所看到的可能是您呈现的特定于语言环境的编码。

确保解码文本的编码,然后重新编码为utf-8。

答案 1 :(得分:0)

我还没有发现如何更改它,但它似乎是Windows内部更深层次的设置,它回归到Windows-1252:在该charset中,一些控制字符被映射到可见字符,从我的问题中可以看出。这&#34;问题&#34;似乎出现在每个Windows程序中,例如也在记事本中。