为什么Java BufferedReader()不能正确读取阿拉伯语和中文字符?
我正在读一个文件,每行包含英语和阿拉伯语字符,另一个文件每行包含英语和中文字符。然而,阿拉伯语和汉语的字符无法正确显示——它们只是以问号的形式出现。你知道我怎样才能解决这个问题吗 以下是我用来阅读的代码:为什么Java BufferedReader()不能正确读取阿拉伯语和中文字符?,java,encoding,utf-8,arabic,Java,Encoding,Utf 8,Arabic,我正在读一个文件,每行包含英语和阿拉伯语字符,另一个文件每行包含英语和中文字符。然而,阿拉伯语和汉语的字符无法正确显示——它们只是以问号的形式出现。你知道我怎样才能解决这个问题吗 以下是我用来阅读的代码: try { String sCurrentLine; BufferedReader br = new BufferedReader(new FileReader(directionOfTargetFile)); int counter = 0;
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();方法)。然后,当找到单词的索引时,它被用来调用在另一个Arraylist中具有相同索引的英语单词。但是,此搜索始终返回false,因为在搜索问号而不是阿拉伯语和中文字符时失败。因此,我的System.out.println print向我显示空值,每次翻译失败一个空值
*我使用的是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个ArrayList,其中可能包含需要翻译的单词。如果在两个ArrayList中都找不到它们,则返回null
03版 调试时,我发现正在读取的行存储在字符串变量中,如下所示:
"3;0000000000;0000001001;1996-06-22;;2010-01-27;����;;01989;������;"
03版
我正在阅读的文件被另一个程序修改后交给了我(除了它是用VB编写的以外,我对它一无所知)。该程序使阿拉伯字母的显示不正确。当我在Notepad++上检查文件的编码时,它显示它是ANSI。然而,当我把它转换成UTF8(它用另一个英文字母代替了阿拉伯字母),然后再转换回ANSI时,阿拉伯语变成了问号 很可能正确读取了中的信息,但是您的输出流可能不是UTF-8,因此输出字符集中无法显示的任何字符都将被替换为“?” 您可以通过取出每个字符并打印字符序号来确认这一点 : 用于读取字符文件的便利类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的。要自己指定这些值,请在FileInputStream上构造InputStreamReader 因此: 如果这仍然不起作用,那么可能您的控制台没有设置为正确显示UTF-8字符。配置取决于所使用的IDE,非常简单 更新:在上述代码中,将
utf-8
替换为cp1256
。这对我来说很好(WinXP、JDK6)
但是我建议您坚持使用UTF-8生成文件。因为
cp1256
不适用于中文,您将再次遇到类似问题。我收到一个错误“不兼容的类型-需要:java.io.FileReader发现:”java.io.InputStreamReader“你从哪儿弄来的?只需从我更新的答案中复制两行,它正在执行…但是我仍然有相同的问题,字符显示,然后检查我答案的其他部分。请告诉我您使用的是什么IDE(如果您使用的是IDE)我使用的是Netbeans 6.8 Mac版本IDE您需要说明您试图将字符输出到的是什么,以及为其配置的输出字符集/编码是什么。给我们提供搜索ArrayList
而不是解释它的代码如何,在调试模式下启动并跟踪程序的执行情况,以查看它与预期NYES的确切区别,但不要将其输出到控制台-查看调试器中的值。控制台包含额外的IO操作,可能会调整编码。然后问题是您正在读取的文件的编码是什么。是UTF-8吗?
public void writeTiFile(String fileName,String str){
try {
FileOutputStream out = new FileOutputStream(fileName);
out.write(str.getBytes("windows-1256"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void writeTiFile(String fileName,String str){
try {
FileOutputStream out = new FileOutputStream(fileName);
out.write(str.getBytes("windows-1256"));
} catch (Exception ex) {
ex.printStackTrace();
}
}