2013-03-20 90 views
0

我正在努力在JEditorPane中顯示阿拉伯語rtf。它顯示錯誤的字符可能是因爲它是錯誤的編碼,我不知道如何解決它。如何使* .rtf文件在JContentPane上以UTF-8編碼顯示?

我可以得到一些幫助嗎?這是代碼的相關部分。

   textPane.setEditorKit(new AdvancedRTFEditorKit()); 
       textPane.setBackground(Color.white); 
       try { 
        BufferedReader fi = new BufferedReader(
           new InputStreamReader(
              new FileInputStream("C:/test - Copy.rtf"), "UTF-8")); 



        rtf.read(fi, textPane.getDocument(), 0); 



        System.out.println(textPane.getDocument()); 
        System.out.println(rtf.toString()); 

        } 
       catch(FileNotFoundException e) 
       { 
       System.out.println("File not found"); 
       } 
       catch(IOException e) 
       { 
       System.out.println("I/O error"); 
       } 
       catch(BadLocationException e) 
       { 

在此先感謝您。

+0

你在哪裏定義變量'rtf'? – 2013-03-20 17:36:57

+1

首先用'setContentType(「text/plain」)'(沒有EditorKit)顯示它。現在你可以看看,文件的編碼是UTF-8以及所選字體是否處理阿拉伯文。 – 2013-03-20 17:41:20

+0

rtf被聲明爲「public static AdvancedRTFEditorKit rtf = new AdvancedRTFEditorKit();」 它實際上是用UTF-8編碼的。這似乎不是問題。 – user2191986 2013-03-20 22:49:17

回答

0
new InputStreamReader(new FileInputStream("C:/test - Copy.rtf"), "UTF-8") 

你假設你的.rtf文件被編碼爲UTF-8。如果你的結果看起來不對,那麼該文件可能不是UTF-8。如果它是阿拉伯語,那麼實際的字符集可能是ISO-8859-6或Windows-1256。如果您在文本編輯器中打開該文件,它應該能夠告訴您字符編碼是什麼。一旦你知道你可以使用:

new InputStreamReader(new FileInputStream("C:/test - Copy.rtf"), "Actual Charset Name") 
+0

看起來像是UTF-8。我只是確定。 反正我試過改變它。它似乎沒有任何效果。保留相同的空方塊而不是字符([] [] []) – user2191986 2013-03-20 22:46:47