如何使用带有重音符号的阿拉伯字母在文本文件中编写内容?Java

3

我在使用 Netbeans 文件查看器时遇到了问题。我的一个阿拉伯字符串中包含每个字母上方的附加符号。当我从字符串中删除这些附加符号时,字母正确显示。但是,当我写带有附加符号的字符串时,它变得无序(不正确)。

以下是正在发生的事情的示例:

  • 没有附加符号的文本(正确):بسم الله الرحمن الرحيم
  • 带有附加符号的文本(错误):it shows broken, but if i copy it here it prints correctly
  • 应该像这样(正确):بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ

我编写的代码用于读取包含阿拉伯字符串及其附加符号的文本文件,将其正确地写入新文件,然后最后删除旧文件。这是代码:

public void arabicReformer(File disordered) {
    File output = new File("data/temp2.txt");

    try {
        BufferedReader br = new BufferedReader(
                new InputStreamReader(new FileInputStream(disordered), "UTF8"));
        BufferedWriter bw = new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(output), "UTF8"));
        String line;

        while ((line = br.readLine()) != null) {
            bw.write(line.trim() + "\n");
        }
        br.close();
        bw.close();
    } catch (UnsupportedEncodingException e) {
        System.out.println(e.getMessage());
    } catch (IOException e) {
        System.out.println(e.getMessage());
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    output.renameTo(disordered);
}

PS:当我复制粘贴带有重音符号的不正确的阿拉伯字符串时,在此处打印的是正确的!


1
你尝试使用其他编码了吗?例如UTF-16?也许可以参考https://dev59.com/gnA75IYBdhLWcg3w_ef1。 - Praba
你确定你的输入文件也是UTF8格式吗? - knoe
Unicode 可以将带重音的字母表示为一个(集成)符号,带重音的字母或两个:不带重音的字母和零宽度重音。 java.text.Normalizer 可以在它们之间进行转换。我认为字母+重音会导致表示错误。创建一个错误报告。也许 RTL/LTR 控件已经解决了这个问题。 - Joop Eggen
1个回答

0

你好,朋友 :) 尝试使用此代码来读取并打印阿拉伯字符,并确保你的文件原始编码为UTF-8。

public void unicodeShow(String fileName) throws UnsupportedEncodingException, FileNotFoundException, IOException{
    Reader reader = new InputStreamReader(new FileInputStream(fileName), "utf-8");
    BufferedReader br = new BufferedReader(reader);
    String a=br.readLine();
    System.out.println(a);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接