以下是我用于阅读的代码:
try { String sCurrentLine; BufferedReader br = new BufferedReader(new FileReader(directionOfTargetFile)); int counter = 0; while ((sCurrentLine = br.readLine()) != null) { String lineFixedHolder = converter.fixParsedParagraph(sCurrentLine); System.out.println("The line number "+ counter + " contain : " + sCurrentLine); counter++; } }
版本01
阅读该行并获得阿拉伯语和中文单词后,我将使用一个函数来翻译它们,方法是在ArrayList(其中包含所有预期的单词)(使用indexOf(); method)中搜索给定的阿拉伯文本.然后,当找到该单词的索引时,它用于调用另一个Arraylist中具有相同索引的英文单词.但是,该搜索总是返回false,因为在搜索问号而不是阿拉伯语和汉字时失败.所以我的System.out.println打印显示我的空值,一个为每个失败的翻译.
*我正在使用Netbeans 6.8 Mac版本的IDE
版本02
int testColor = dbColorArb.indexOf(wordToTranslate); int testBrand = -1; if ( testColor != -1 ) { String result = (String)dbColorEng.get(testColor); return result; } else { testBrand = dbBrandArb.indexOf(wordToTranslate); } //System.out.println ("The testBrand is : " + testBrand); if ( testBrand != -1 ) { String result = (String)dbBrandEng.get(testBrand); return result; } else { //System.out.println ("The first null"); return null; }
我实际上正在搜索2个可能包含要翻译的单词的Arraylists.如果无法在两个ArrayLists中找到它们,则返回null.
版本03
当我调试我发现读取的行存储在我的String变量中,如下所示:
"3;0000000000;0000001001;1996-06-22;;2010-01-27;����;;01989;������;"
版本03
我正在阅读的文件已经被另一个程序修改了(我在VB旁边没有任何知道),该程序使阿拉伯字母出现不正确.当我在记事本上检查文件的编码时,表明它是ANSI.但是当我将其转换成UTF8(用其他英文替换阿拉伯语的信件)然后将其转换回ANSI时,阿拉伯语成为问号!
解决方法
FileReader
javadoc:
Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate. To specify these values yourself,construct an InputStreamReader on a FileInputStream.
所以:
Reader reader = new InputStreamReader(new FileInputStream(fileName),"utf-8"); BufferedReader br = new BufferedReader(reader);
如果仍然无法使用,那么也许您的控制台未设置为正确显示UTF-8字符.配置取决于使用的IDE,而且相当简单.
更新:在上面的代码中,用cp1256替换utf-8.这对我来说很好(WinXP,JDK6)