java - (IPA) 国际音标字符在 mac 中显示正常,但在 windows 中不显示
问题描述
我正在使用一个显示 Json 文件中的 IPA 字符的应用程序。
我正在使用带有 Netbeans 的 IMac,并且该应用程序运行良好,但是如果我编译该项目并在 Windows 计算机中执行它,它会显示不同的字符,甚至不是 IPA 字符。
我已经尝试过更改不同的字体系列,结果是一样的。
public class JavaFXApplicationJsonFile extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Print JsonFile");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
JSONParser jsonParser = new JSONParser();
String jsonFileString = "src/javafxapplicationjsonfile/jsonFile.json";
try {
FileReader fileReader = new FileReader(jsonFileString);
Object obj = jsonParser.parse(fileReader);
JSONObject jsonObject = (JSONObject) obj;
JSONArray jsonArray = (JSONArray) jsonObject.get("palabras");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject Palabras = (JSONObject) jsonArray.get(i);
System.out.println(Palabras.get("IPA").toString());
Alert alert = new Alert(Alert.AlertType.INFORMATION, Palabras.get("IPA").toString(), ButtonType.OK);
alert.show();
}
} catch (FileNotFoundException ex) {
Logger.getLogger(JavaFXApplicationJsonFile.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(JavaFXApplicationJsonFile.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParseException ex) {
Logger.getLogger(JavaFXApplicationJsonFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
解决方案
FileReader 类将使用操作系统的默认字符集。
请参阅 InputStreamReader,尤其是采用 CharSet 或字符集名称的构造函数。
您可能想要使用 UTF-8(Mac OS 上的默认字符集),因为您说它在 Mac OS 上正常工作。
在 Windows 上运行时,默认字符集是 Windows-1252