Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么在使用InputStream读取.txt文件时会得到问号而不是符号?_Android_Character_Inputstream - Fatal编程技术网

Android 为什么在使用InputStream读取.txt文件时会得到问号而不是符号?

Android 为什么在使用InputStream读取.txt文件时会得到问号而不是符号?,android,character,inputstream,Android,Character,Inputstream,我知道这一定很明显,但找不到答案 我应该怎么做才能获得正确的字符,如“,”等 这就是我用的方法 public void read(Context context) { InputStream inputStream = context.getResources().openRawResource( R.raw.puzzles); Scanner scanner = new Scanner(inputStream);

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

我应该怎么做才能获得正确的字符,如“,”等

这就是我用的方法

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

    }
public void read(上下文){
InputStream InputStream=context.getResources().openRawResource(
R.原始拼图);
扫描仪=新扫描仪(inputStream);
scanner.useDelimiter(模式);
对于(int i=0;i<70;i++){
id[i]=scanner.next();
titles[i]=scanner.next();
问题[i]=scanner.next();
answers[i]=scanner.next();
}
}

感谢

默认情况下,扫描仪对象似乎只能识别字母和数字…请尝试一种不使用扫描仪的方法,如以下问题的答案:

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


您可能希望使用while循环来读取数据,直到文件结束,而不是为将来可能有更多或更少数据的拼图文件指定一个固定数字(在您的情况下为70)。

默认情况下,扫描仪对象似乎只识别字母和数字…尝试一种不使用扫描仪的方法,如此问题的答案:

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


您可能希望使用while循环来读取数据,直到文件结束,而不是为将来可能有更多或更少数据的拼图文件指定一个固定的数字(在您的情况下为70)。

尝试使用
Scanner
的实例,在其中传入一个字符集,即。
新扫描仪(InputStream src,String charsetName)


HTH

尝试使用
Scanner
的一个实例,在其中传入一个字符集,即。
新扫描仪(InputStream src,String charsetName)


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

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

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

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

最后我找到了支持的编码

记事本中的默认值似乎是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);
        }

    }

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

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

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

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

最后我找到了支持的编码

记事本中的默认值似乎是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);
        }

    }

嗨@Devunwired,我用utf-8试过了,但还是得到了同样的结果。我应该用什么字符集来试呢?嗨@Devunwired,我用utf-8试过了,但还是得到了同样的结果。我应该用什么字符集来试呢?谢谢@Sam,我肯定会用一种方法来读取字符,而不是你链接上说的字节,但仍然不理解w为什么我不能使用扫描器。你在哪里读到它只识别字母和数字的?关于循环,你完全正确。我只是不知道如何使用扫描器类。首先,你的代码和扫描器文档没有给出你不阅读符号的任何明确原因,所以我假设你没有编造它,agre我不想深入研究为什么,因为我自己使用了另一种方法。仍然无法通过BufferedReader readLine()获得正确的符号方法。有什么建议吗?谢谢@Sam,我肯定会像你的链接上说的那样用字符代替字节,但我还是不明白为什么我不能使用扫描仪。你从哪里读到它只识别字母和数字的?关于循环,你完全正确。我只是不知道如何使用Scanner类。thx老实说,您的代码和扫描仪文档没有给出您不阅读符号的任何明确原因,因此我假设您没有编造符号,同意您的意见,并提供了一个可行的替代方案。:)我不想深入研究为什么,当我自己使用另一种方法时。仍然无法使用Buf获得正确的符号你有什么建议吗?