3

私のプログラムでは、UTF-8ファイルからベンガル語(インド語)のテキストを読み取り、JavaFxのテキストコンポーネントに表示しています。文字は表示されていますが、正しく配置されていません。

このタイプの複雑なスクリプト言語では、一部の母音は左側と右側の両方で文字をラップする必要がありますが、一部のコンピューターでは、最初に母音、次に文字のように間違った方法で表示されます。

たとえば、「分割母音」োを含む単語は正しく表示されません。 https://bug686225.bugzilla.mozilla.org/attachment.cgi?id=559780

システムではhttp://www.tariquemahmud.net/?p=35を使用して修正されましたが、JavaFxプログラムでは、問題は引き続き発生します。

間違った表示 間違った表示

正しいDeisplay 正しいDeisplay

コンピュータで上記のスクリーンショットのように、次の実行可能ファイルが正しいか間違っているかを確認できます

http://dl.dropbox.com/u/655237/share/BanglaTest.zip

私は次のコードを使用しています

package banglatest;

import java.io.File;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.util.Scanner;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class BanglaTest extends Application {

    @Override
    public void start(Stage primaryStage) throws MalformedURLException {
        Text text = new Text();
        File file = new File("data.txt");
        StringBuffer sb = new StringBuffer();
        try {
            Scanner scanner = new Scanner(file,"UTF-8");
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                sb = sb.append(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        text.setText(sb.toString());
        Font font = Font.loadFont(new File("bangla.ttf").toURL().toExternalForm(), 20);
        text.setFont(font);
        StackPane root = new StackPane();
        root.getChildren().add(text);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
4

1 に答える 1

1

最後に、このサポートはJDK 8(FX 8)で提供されました。同じの開発者プレビューを使用して再コンパイルし、それは動作しました。

于 2012-11-12T06:37:18.443 に答える