sve*_*ija 9 java eclipse file-io android character-encoding
我打开记事本(Windows)并写
Some lines with special characters
Special: Ž?š??
Run Code Online (Sandbox Code Playgroud)
并转到另存为... "someFile.txt",其中Encoding设置为UTF-8.
在Java中我有
FileInputStream fis = new FileInputStream(new File("someFile.txt"));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(isr);
String line;
while((line = in.readLine()) != null) {
printLine(line);
}
in.close();
Run Code Online (Sandbox Code Playgroud)
但我得到问号和类似的"特殊"字符.为什么?
编辑:我有这个输入(.txt文件中的一行)
665,Ž?š??
Run Code Online (Sandbox Code Playgroud)
和这段代码
FileInputStream fis = new FileInputStream(new File(fileName));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(isr);
String line;
while((line = in.readLine()) != null) {
Toast.makeText(mContext, line, Toast.LENGTH_LONG).show();
Pattern p = Pattern.compile(",");
String[] article = p.split(line);
Toast.makeText(mContext, article[0], Toast.LENGTH_LONG).show();
Toast.makeText(mContext, Integer.parseInt(article[0]), Toast.LENGTH_LONG).show();
}
in.close();
Run Code Online (Sandbox Code Playgroud)
和Toast输出(对于不熟悉Android的人来说,Toast只是一种在屏幕上显示特定文本的弹出窗口的方法)很好.控制台显示"奇怪的字符"(可能是因为控制台窗口中的编码).但它在解析整数时失败了,因为控制台说这个(warning: toast output is just fine) - 问题?
似乎String包含一些"奇怪"的字符,Toast无法显示/渲染,但是当我尝试解析它时,它会崩溃.建议?
如果我把ANSI放在NotePad中它可以工作(整数解析)并且没有如上图所示的怪异字符,但当然我的特殊字符不起作用.
Bal*_*usC 17
它是输出控制台,不支持这些字符.由于您使用的是Eclipse,因此需要确保将其配置为使用UTF-8.您可以通过Window> Preferences> General> Workspace> Text File Encoding>设置为UTF-8来完成此操作.
更新按照更新的问题和意见,显然是UTF-8 BOM是罪魁祸首.记事本默认情况下会在保存时添加UTF-8 BOM.看起来HTC上的JRE并没有吞下它.您可能需要考虑使用此答案中UnicodeReader概述的示例而不是代码中的示例.它会自动检测并跳过BOM.InputStreamReader
FileInputStream fis = new FileInputStream(new File(fileName));
UnicodeReader ur = new UnicodeReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(ur);
Run Code Online (Sandbox Code Playgroud)
与实际问题无关,在finally块中关闭资源是一种很好的做法,这样可以确保在异常情况下关闭它们.
BufferedReader reader = null;
try {
reader = new BufferedReader(new UnicodeReader(new FileInputStream(fileName), "UTF-8"));
// ...
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
Run Code Online (Sandbox Code Playgroud)
同样无关,我建议把它放在Pattern p = Pattern.compile(",");循环之外,或者甚至把它变成一个静态常量,因为它编译起来相对昂贵而且每次在循环中都不需要这样做.
| 归档时间: |
|
| 查看次数: |
54055 次 |
| 最近记录: |