【问题标题】:Why does JavaFX display some control characters?为什么 JavaFX 会显示一些控制字符?
【发布时间】:2018-06-28 10:57:04
【问题描述】:

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

以下是字符 128-159 显示的符号:

Pasting this to IntelliJ sees a similar result,所以它似乎是字体,但我无法在非 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();
    }
}

【问题讨论】:

    标签: java javafx unicode fonts


    【解决方案1】:

    Ascii 只定义了 128 个字符,即一个字的前 7 位。超过 128,开发人员看到了将这些“空”字符用于更有用的东西的机会。但是,thousands of developers had this same idea without any real standardization。因此,您所看到的可能是正在呈现您的特定于语言环境的编码。

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

    【讨论】:

    • Java 使用 Unicode,Windows 也使用。这似乎主要是CP1252和ISO-8859-1之间的区别,但是你写的和这里的问题没有太大关系。
    • @Joey 如果猜到了错误的 input 编码,Java 是否使用 Unicode output 无关紧要。因此建议显式解码输入文本的原始编码。
    • 你读过代码吗?源代码为ASCII;带有这些字符的字符串是在运行时构建的,因此绝对是 Unicode。
    • @Joey 显然它没有被解码(可能是TextField),就好像它是unicode一样。否则不会出现 mojibake。除非是用户字体的错,否则这绝对是编码问题。
    • 我的猜测是 JavaFX 会遵循浏览器的操作并将非非拉丁 Unicode 文本解释为 CP1252。但是 text 属性仍然是 Java 字符串,因此是 Unicode。没有byte[] 可以应用任何编码。
    【解决方案2】:

    我还没有找到如何更改它,但它似乎是 Windows 内部更深的设置,它回退到 Windows-1252:在该字符集中,一些控制字符被映射到可见字符,可以在我的问题中可以看到。这个“问题”似乎出现在每个 Windows 程序中,例如也可以在记事本中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 2018-12-28
      相关资源
      最近更新 更多