我输入的文字:
String text =
new StringBuilder ( )
.appendCodePoint ( 65_536 ) // 𐀀 = 65536 = LINEAR B SYLLABLE B008 A
.append ( "\n" )
.appendCodePoint ( 129_318 ) // 129_318 = 🤦 = FACE PALM
.append ( "\n" )
.append ( "🤦♂️" ) // man facepalming = 🤦♂️ = [129318, 8205, 9794, 65039]
.append ( "\n" )
.append ( "« fin »" )
.toString ( );
控制台正确显示:
𐀀
🤦
🤦♂️
« fin »
…但是 JavaFX 错误地显示了第一行和第三行:
javafx.scene.control.TextArea
正确渲染此类字符?
显然不是字体问题。 非常相同的
String
对象在控制台上正确呈现,同时,在同一个应用程序中,使用相同的JDK。
在 IntelliJ IDEA 2024.3 EAP、macOS Sonoma 14.7(美国版)上运行 Java 23.0.1 和 OpenJFX 23.0.1。
这个最小示例应用程序的 JavaFX 代码:
package work.basil.example.exunicodeglyph;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.io.IOException;
public class HelloApplication extends Application
{
@Override
public void start ( Stage stage ) throws IOException
{
Scene scene = this.makeScene ( );
stage.setTitle ( "Hello!" );
stage.setScene ( scene );
stage.show ( );
}
private Scene makeScene ( )
{
// Widgets
TextArea textArea = new TextArea ( );
String text =
new StringBuilder ( )
.appendCodePoint ( 65_536 ) // 𐀀 = 65536 = LINEAR B SYLLABLE B008 A
.append ( "\n" )
.appendCodePoint ( 129_318 ) // 129_318 = 🤦 = FACE PALM
.append ( "\n" )
.append ( "🤦♂️" ) // man facepalming = 🤦♂️ = [129318, 8205, 9794, 65039]
.append ( "\n" )
.append ( "« fin »" )
.toString ( );
System.out.println ( text );
textArea.textProperty ( ).set ( text );
// Arrange
StackPane root = new StackPane ( );
root.getChildren ( ).add ( textArea );
return new Scene ( root , 320 , 240 );
}
public static void main ( String[] args )
{
HelloApplication.launch ( );
}
}
Maven POM 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>work.basil.example</groupId>
<artifactId>ExUnicodeGlyph</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ExUnicodeGlyph</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>23.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>23.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.11.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>23</source>
<target>23</target>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<executions>
<execution>
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>work.basil.example.exunicodeglyph/work.basil.example.exunicodeglyph.HelloApplication</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>
<jlinkImageName>app</jlinkImageName>
<noManPages>true</noManPages>
<stripDebug>true</stripDebug>
<noHeaderFiles>true</noHeaderFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
这个问题与这个问题类似,但这里的主题是JavaFX而不是Swing。
不是答案,只是一些附加信息。
我尝试从这里运行 EmoApp:
在带有 JDK 22.0.2 和 JavaFX 22.0.2 的 OS X (Intel) 14.6.1 上。
并在使用各种字体渲染时得到此输出:
所有渲染均未提供 Basil 的问题中提供的预期输出。