Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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
Java BufferedReader在使用readline时未分析ascii控制字符_Java_Ascii_Bufferedreader_Control Characters - Fatal编程技术网

Java BufferedReader在使用readline时未分析ascii控制字符

Java BufferedReader在使用readline时未分析ascii控制字符,java,ascii,bufferedreader,control-characters,Java,Ascii,Bufferedreader,Control Characters,我正在尝试从文本文件中拆分一些带有ascii控制字符的字符串,并最终获得以下输出: Record1 记录2 记录3 记录4 我的文本文件在记事本++中如下所示: 但是当使用BufferedReader从文本文件获取行时,它不会捕获文件中的控制字符。我的代码如下所示: File file = new File("Records.txt"); FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new

我正在尝试从文本文件中拆分一些带有ascii控制字符的字符串,并最终获得以下输出:

Record1
记录2
记录3
记录4
我的文本文件在记事本++中如下所示:

但是当使用
BufferedReader
从文本文件获取行时,它不会捕获文件中的控制字符。我的代码如下所示:

File file = new File("Records.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");

BufferedReader bufferedReader = new BufferedReader(isr);

String text = bufferedReader.readLine();

System.out.println(text);
我的sysout结果如下所示:

File file = new File("Records.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");

BufferedReader bufferedReader = new BufferedReader(isr);

String text = bufferedReader.readLine();

System.out.println(text);
Record1Record2Record3Record4
我应该使用ISO-8859-1而不是UTF-8吗

String s = "test" + (char) 31 + "test2";
String c = String.valueOf((char) 31);
System.out.println(Arrays.asList(s.split(c)));
假设31是正确的字符(单位分隔符),此代码将在每次出现时分割,因此它应该满足您的需要


假设31是正确的字符(单位分隔符),此代码将在每次出现时分割,因此它应该满足您的需要。。当应用于带有控制字符的“原始”数据时,尤其是在终端(cmd窗口)上显示时,stuff不可靠

旁注:System.out.print。。当应用于带有控制字符的“原始”数据时,尤其是在终端(cmd窗口)上显示时,stuff不可靠

您可以使用US字符作为分隔符分别读取每条记录:

Scanner scanner = new Scanner(new File("Records.txt")).useDelimiter("\u001F");
while (scanner.hasNext())
    System.out.println(scanner.next());
输出:

Record1
Record2
Record3
Record4

您可以使用US字符作为分隔符分别读取每条记录:

Scanner scanner = new Scanner(new File("Records.txt")).useDelimiter("\u001F");
while (scanner.hasNext())
    System.out.println(scanner.next());
输出:

Record1
Record2
Record3
Record4

使用单位分隔符的字符值给了我一个提示。这就是我从我那一刻起所做的

    File file = new File("Records.txt");
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-1");

    BufferedReader bufferedReader = new BufferedReader(isr);

    String text = bufferedReader.readLine();

    Character delim = '\037';

    String[] records = text.split(delim.toString());

    for (String string : records) {
        System.out.println(string);
    }
并获得了我的预期输出:

Record1
Record2
Record3
Record4

使用单位分隔符的字符值给了我一个提示。这就是我从我那一刻起所做的

    File file = new File("Records.txt");
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-1");

    BufferedReader bufferedReader = new BufferedReader(isr);

    String text = bufferedReader.readLine();

    Character delim = '\037';

    String[] records = text.split(delim.toString());

    for (String string : records) {
        System.out.println(string);
    }
并获得了我的预期输出:

Record1
Record2
Record3
Record4

您可以使用
ISO-8859-1
进行尝试。这些字符是什么?我实际上用ISO-8859-1试过了,结果还是一样的。如果我没有弄错的话,这些字符是ascii控制代码。GS是ctl-]是记事本+,在我的谷歌搜索中,它应该是一个单位分隔符(ctrl^)字符31。它不是一个可见的字符。如果要将其替换为换行符,请将其替换为这样的换行符,但目标不是无论如何都要修改文件。是否真的不可能将这些字符解析为Java?您确实读取了它们,但它们没有换行符,因此您的输出将始终为1行。只有换行和回车操作才能启动新行。此外,您也不会修改该文件。您可以先读取它,然后在内存中修改它,然后再写入它。您可以使用
ISO-8859-1
进行尝试。这些字符是什么?我实际上用ISO-8859-1试过了,结果还是一样的。如果我没有弄错的话,这些字符是ascii控制代码。GS是ctl-]是记事本+,在我的谷歌搜索中,它应该是一个单位分隔符(ctrl^)字符31。它不是一个可见的字符。如果要将其替换为换行符,请将其替换为这样的换行符,但目标不是无论如何都要修改文件。是否真的不可能将这些字符解析为Java?您确实读取了它们,但它们没有换行符,因此您的输出将始终为1行。只有换行和回车操作才能启动新行。此外,您也不会修改该文件。你读它,在内存中修改它,然后写它