1

我知道这一定很明显,但找不到答案。

我应该怎么做才能获得正确的字符,例如“,'等......?

这是我正在使用的方法,

public void read(Context context) {

        InputStream inputStream = context.getResources().openRawResource(
                R.raw.puzzles);
        Scanner scanner = new Scanner(inputStream);
        scanner.useDelimiter(PATTERN);
        for (int i = 0; i < 70; i++) {
            ids[i] = scanner.next();
            titles[i] = scanner.next();
            questions[i] = scanner.next();
            answers[i] = scanner.next();
        }

    }

谢谢

4

3 回答 3

1

经过几天的研究,我终于找到了答案。

首先,我从 InputStream 创建了一个 BufferedReader 用于字符读取而不是原始字节读取。

最重要的是,我使用带有 charSetName 的构造函数实例化了 InputStream。

如果您在记事本中转到“另存为”,您可以选择您的编码。

最后我在这里找到了支持的编码。

NotePad 中的默认值似乎是 ANSI,似乎不受支持,因此我对其进行了更改并将我的 .txt 文件另存为 UTF8。

这是代码:

public void read(Context context) {

        InputStream inputStream = context.getResources().openRawResource(
                R.raw.puzzles);

        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new InputStreamReader(
                    inputStream, "UTF8"));
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }

        Puzzle p = null;

        Scanner scanner = new Scanner(bufferedReader);
        scanner.useDelimiter(TOKEN);
        // Skips the first strange char
        scanner.next();
        while (scanner.hasNext()) {

            p = new Puzzle();
            p.setId(scanner.next());
            p.setTitle(scanner.next());
            p.setQuestion(scanner.next());
            p.setAnswer(scanner.next());
            puzzles.add(p);
        }

    }
于 2012-05-14T15:06:50.127 回答
0

默认情况下,Scanner 对象似乎只识别字母和数字......尝试一种不使用扫描仪的方法,例如这个问题的答案:Android read text raw resource file

并使用 String.indexOf() 或 TextUtils.StringSplitter 或任何类似的东西来读取每一行并解析令牌之间的真实字符串。

您可能希望使用 while 循环来读取数据,直到文件末尾,而不是使用固定数字(在您的情况下为 70)用于可能具有更多或更少数据的未来拼图文件。

于 2012-05-11T17:29:27.070 回答
0

尝试使用Scanner传入字符集的实例,即 new Scanner (InputStream src, String charsetName)

高温高压

于 2012-05-11T17:37:28.260 回答