导入文件时打印时不出现的字符?

时间:2018-03-29 01:12:03

标签: java file printing

我正在将文件导入我的代码并尝试打印它。该文件包含

 i don't like cake.
 pizza is good.
 i don’t like "cookies" to.
 17.
 29.

第二个没有“正确的单引号”,当我打印输出时

 don�t 

问号打印出一个空白方块。有没有办法将其转换为常规撇号? 编辑:

     public class Somethingsomething {


     public static void main(String[] args) throws FileNotFoundException, 
    IOException {
    ArrayList<String> list = new ArrayList<String>();
    File file = new File("D:\\project1Test.txt");//D:\\project1Test.txt
    if(file.exists()){//checks if file exist

    FileInputStream fileStream = new FileInputStream(file);
    InputStreamReader input = new InputStreamReader(fileStream);
    BufferedReader reader = new BufferedReader(input);      

    String line;
    while( (line = reader.readLine()) != null) { 
     list.add(line);
     }


    for(int i = 0; i < list.size(); i ++){
        System.out.println(list.get(i));
    }

    }

    }}

它应该正常打印,但第二个“不要”在撇号上有一个白色块 这是我正在使用的文件https://www.mediafire.com/file/8rk7nwilpj7rn7s/project1Test.txt 编辑:如果它更有助于我在这里找到角色的完整文档 https://www.nytimes.com/2018/03/25/business/economy/labor-professionals.html

3 个答案:

答案 0 :(得分:2)

这都是关于字符编码的。表示字符的方式并不总是相同,而且往往会被误解。

字符通常存储为依赖于编码标准的数字(并且有很多这样的数字)。例如,在ASCII,&#34; a&#34;是97UTF-861

现在,当您在这种情况下看到诸如问号(称为替换字符)之类的有趣字符时,通常会将编码标准误解为另一个标准,并且替换character用于替换未知或误解的字符。

要解决您的问题,您需要告诉读者使用特定的字符编码来读取您的文件,例如SOME-CHARSET

替换它:

InputStreamReader input = new InputStreamReader(fileStream);

用这个:

InputStreamReader input = new InputStreamReader(fileStream, "SOME-CHARSET");

可以使用here的字符集列表。不幸的是,您可能希望逐个浏览它们。可以找到最常见的简短列表here

答案 1 :(得分:0)

您的问题几乎可以肯定是您正在使用的编码方案。您可以使用所需的大多数编码方案读取文件。告诉Java您的输入是如何编码的。 UTF-8在Linux上很常见。 Windows原生是CP-1250。

如果您正在处理在其他操作系统上创建的文件,这就是您一直遇到的问题。

See hereHere

答案 2 :(得分:0)

我会给你一个不同的方法......

使用适当的方法读取纯文本文件。试试这个:

public static String getTxtContent(String path)
{
    try(BufferedReader br = new BufferedReader(new FileReader(path))) 
    {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
        sb.append(line);
        sb.append(System.lineSeparator());
        line = br.readLine();
    }
    return sb.toString(); 
    }catch(IOException fex){ return null; }
}