如何读取带有德语(欧洲)字符的 ansi 编码文件并正确显示

How to read an ansi-coded file with german (european) characters and display correctly

我有一个用 Windows 编辑器(或 Word)编写的标准文本文件,并以 ANSI 格式保存在 android 设备中。如果我打开并阅读此文件并将其显示在我的 Android 设备上,所有字符都会正确显示,但德语元音变音 äÄöÖüÜß 除外。黑色菱形内显示白色问号而不是这些字符。 (我使用 remoteViews.setTextViewText(... 在主屏幕小部件中显示它们)

我在谷歌上搜索了几个小时,发现了很多关于使用 UTF-8 编码等的提示。但是当我以 UTF-8 或除 ANSI 之外的任何格式保存文件时,我会遇到异常并且无法读取文件。使用 android 编辑器显示文件编码在 ANSI 和 UTF-8 中都是正确的。

我的程序太长,无法复制到这里,所以我提取了希望相关的部分并放在下面。请帮忙!

public class Test {

    static void readFile() {
        File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "birthday.txt");
        if (file.exists())
        {
            try {
                FileReader fileReader = new FileReader(file);
                BufferedReader br = new BufferedReader(fileReader);
                //BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(directory+"birthday.txt"), "windows-1252"));

                String lineOfText;
                while ((lineOfText = br.readLine()) != null) {
                    //Output lineOfText  via remoteViews.setTextViewText(WidgetOutput.getRef(linecounter).getIdWhat(), lineOfText);

                }
                br.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

评论的 BufferedReader 行看起来应该有效。但是,windows-1252java.nio 中 类 的规范名称。对于 java.io 中的 类(如 InputStreamReader),规范名称是 Cp1252。参见 Supported Encodings

您也可以尝试 ISO-8859-1 (nio) 或 ISO8859_1 (io)。