私のプログラムでは、UTF-8ファイルからベンガル語(インド語)のテキストを読み取り、JavaFxのテキストコンポーネントに表示しています。文字は表示されていますが、正しく配置されていません。
このタイプの複雑なスクリプト言語では、一部の母音は左側と右側の両方で文字をラップする必要がありますが、一部のコンピューターでは、最初に母音、次に文字のように間違った方法で表示されます。
たとえば、「分割母音」োを含む単語は正しく表示されません。 https://bug686225.bugzilla.mozilla.org/attachment.cgi?id=559780
システムではhttp://www.tariquemahmud.net/?p=35を使用して修正されましたが、JavaFxプログラムでは、問題は引き続き発生します。
間違った表示
正しい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);
}
}