使用特殊字符读取/写入.txt文件 [英] Read/write .txt file with special characters

查看:187
本文介绍了使用特殊字符读取/写入.txt文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我打开记事本(Windows)并写入

I open Notepad (Windows) and write

Some lines with special characters
Special: Žđšćč

并转到另存为... someFile .txtwith Encoding 设置为 UTF-8

and go to Save As... "someFile.txt" with Encoding set to 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();

但是我收到问号和类似的特殊字符。为什么?

But I get question marks and similar "special" characters. Why?

编辑:我有这个输入(.txt文件中的一行)

I have this input (one line in .txt file)

665,Žđšćč

此代码

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();

Toast 输出(对于不熟悉Android的用户,吐司只是一种在屏幕上显示弹出窗口的方法,其中包含特定的文本)很好。控制台显示奇怪的人物(可能是因为在控制台窗口中编码)。但是,由于控制台说这个( warning:toast output is just fine ) - 问题

And Toast output (for ones who aren't familiar with Android, Toast is just a method to show a pop-up on screen with particular text in it) is fine. Console shows "weird characters" (probably because of encoding in console window). But it fails at parsing an integer because console says this (warning: toast output is just fine) - Problem?

似乎String包含一些Toast不能显示的奇怪字符/ render,但是当我尝试解析它时,它会崩溃。建议?

It seems like the String is containing some "weird" characters which Toast can't show/render but when I try to parse it, it crashes. Suggestions?

如果我把ANSI放在笔记本电脑中,它工作(整数解析),并且没有奇怪的字符,如上图所示,但当然我的特殊字符不是

If I put ANSI in NotePad it works (integer parsing) and there are no weird chars as in the picture above, but of course my special characters aren't working.

推荐答案

这是不支持这些字符的输出控制台。由于您使用的是Eclipse,因此您需要确保将其配置为使用UTF-8。您可以通过窗口>首选项>常规>工作区>文本文件编码>设置为UTF-8

It's the output console which doesn't support those characters. Since you're using Eclipse, you need to ensure that it's configured to use UTF-8 for this. You can do this by Window > Preferences > General > Workspace > Text File Encoding > set to UTF-8.

  • Unicode - How to get the characters right?

更新,显然是 UTF-8 BOM 是罪魁祸首。默认情况下,记事本在保存时添加UTF-8 BOM。看起来你HTC上的JRE不会吞下去。您可能需要考虑使用 UnicodeReader 示例,如这个答案,而不是代码中的 InputStreamReader 。它自动检测并跳过BOM。

Update as per the updated question and the comments, apparently the UTF-8 BOM is the culprit. Notepad by default adds the UTF-8 BOM on save. It look like that the JRE on your HTC doesn't swallow that. You may want to consider to use the UnicodeReader example as outlined in this answer instead of InputStreamReader in your code. It autodetects and skips the BOM.

FileInputStream fis = new FileInputStream(new File(fileName));
UnicodeReader ur = new UnicodeReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(ur);






与实际问题无关,这是一个很好的做法在终止块中关闭资源,以确保在特殊情况下关闭资源。


Unrelated to the actual problem, it's a good practice to close resources in finally block so that you ensure that they will be closed in case of exceptions.

BufferedReader reader = null;
try {
    reader = new BufferedReader(new UnicodeReader(new FileInputStream(fileName), "UTF-8"));
    // ...
} finally {
    if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}

也不相关,我建议将 Pattern p = Pattern.compile(,); 在循环之外,甚至使其成为静态常量,因为编译它相对昂贵,没有必要这一次在循环中。

Also unrelated, I'd suggest to put Pattern p = Pattern.compile(","); outside the loop, or even make it a static constant, because it's relatively expensive to compile it and it's unnecessary to do this everytime inside a loop.

这篇关于使用特殊字符读取/写入.txt文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆