Java 文件读取编码故障

Java 文件读取编码故障,java,string,file,encoding,Java,String,File,Encoding,我有一个文件要读保存,用它的信息做些什么,然后把它们重写回另一个文件。问题是原始文件包含一些来自亚洲语言的字符,如坂本龍一,東京事変和メリー(我猜他们是中国人、日本人和韩国人)。我可以用记事本++看到它们 问题是,当我通过java读写这些东西时,它们会被破坏,我在输出文件中看到一些奇怪的东西,如??或或?- 我想我的编码有问题,但我不知道该使用哪种编码,也不知道如何使用它 有人能帮我吗?这是我的密码: String fileToRead= SONG_2M; Sca

我有一个文件要读保存,用它的信息做些什么,然后把它们重写回另一个文件。问题是原始文件包含一些来自亚洲语言的字符,如
坂本龍一
東京事変
メリー(我猜他们是中国人、日本人和韩国人)。我可以用记事本++看到它们

问题是,当我通过java读写这些东西时,它们会被破坏,我在输出文件中看到一些奇怪的东西,如
??
?-
我想我的编码有问题,但我不知道该使用哪种编码,也不知道如何使用它

有人能帮我吗?这是我的密码:

    String fileToRead= SONG_2M;
            Scanner scanner = new Scanner(new File(fileToRead), "UTF-8");

            while (scanner.hasNextLine()) {

                String line = scanner.nextLine();
                String[] songData = line.split("\t");
                if (/*something*/) {
                    save the string in the map
                }
            }
            scanner.close();

            saveFile("coded_artist_small2.txt");
}

    public void saveFile(String fileToSave) throws FileNotFoundException, UnsupportedEncodingException {
            PrintWriter writer = new PrintWriter(fileToSave, "UTF-8");

            for (Entry<String, Integer> entry : artistsMap.entrySet()) {
                writer.println(entry.getKey() + DELIMITER + entry.getValue());
            }

            writer.close();
        }
String fileToRead=SONG_2M;
扫描仪扫描仪=新扫描仪(新文件(fileToRead),“UTF-8”);
while(scanner.hasNextLine()){
字符串行=scanner.nextLine();
String[]songData=line.split(“\t”);
如果(/*某物*/){
将字符串保存在映射中
}
}
scanner.close();
保存文件(“coded_artist_small2.txt”);
}
public void saveFile(字符串fileToSave)抛出FileNotFoundException、UnsupportedEncodingException{
PrintWriter writer=新的PrintWriter(文件保存,“UTF-8”);
for(条目:artistsMap.entrySet()){
writer.println(entry.getKey()+分隔符+entry.getValue());
}
writer.close();
}

事实上,您的输入文件很可能不是用UTF-8编码的(一种每字符使用两个字节的编码,符合unicode标准)。例如,字符您看到的是unicode 0x5742。事实上,如果您的文件是用ASCII编码的,则应显示为字符0x57,后跟0x42-即9*

如果您不确定文件的编码,可以猜测它可能是ASCII文本。设置扫描仪时,请尝试删除编码,即生成代码的第二行

Scanner scanner = new Scanner(new File(fileToRead));
事实上,如果您知道该文件是unicode,则会有不同的编码。有关更全面的unicode阅读器-处理各种unicode编码,请参阅


对于您的输出-您需要决定文件的编码方式:一些unicode编码(例如UTF-8)或ASCII。

那么您的文件是UTF-8格式的吗?编码和解码必须遵循相同的机制,从何处获得该文件?此外,您的代码在这样的格式下很难读取,它是不完整的,很明显,它所做的不仅仅是为了证明问题。请提供一个简短但完整的程序(正确格式化)来演示这个问题。我不知道该文件使用什么编码,notepad++说它是UTF-8格式的(或者至少它使用这个字符集读取)。这个文件是由我的教授提供的,它是一个大学项目(与编码无关:P)。除了这个问题,它工作得很好,我想在提交项目之前解决它。我刚刚编辑了这个问题,使它更具可读性。很抱歉,格式不正确。我已经尝试在不指定编码的情况下读/写它,但仍然得到奇怪的结果。OK:在编辑问题之后-我意识到这可能不是您遇到的问题。您需要做更多的检测工作来跟踪引入错误编码的位置-在拆分变量行之前,将一些调试输出(例如System.out.println语句)放入输出变量行,然后使用Sting键将条目添加到循环中的映射中。如果它们在控制台上看起来正常,那么是输出损坏了东西,如果不是的话-我们需要查看的是输入阶段。我检查了调试和控制台:在UTF-8读取模式下,调试中的变量具有正确的值(
マキシマム・ザ・ホルモン),但控制台显示问号。在不使用编码的情况下,调试和控制台都显示相同的值,但它是不正确的(
¸¸èææ?)™½å­
)。这些值是通过我使用的所有数据结构来实现的,我想说的是,它看起来像是在ASCII查看器中查看输出(UTF-8编码)。对于我给出的例子,这将给出“s”或类似于“code”的东西,比如英国艺术家8å239; 339;Ĝ184; 15
。但是我在寡妇身上运行eclipse。如果有一些更改控制台编码的设置,我现在无法检查它。但是我不关心控制台,问题是输出文件不正确。