我正在将文件导入我的代码并尝试打印它。该文件包含
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
答案 0 :(得分:2)
这都是关于字符编码的。表示字符的方式并不总是相同,而且往往会被误解。
字符通常存储为依赖于编码标准的数字(并且有很多这样的数字)。例如,在ASCII
,&#34; a&#34;是97,UTF-8
是61。
现在,当您在这种情况下看到诸如问号(称为替换字符)之类的有趣字符时,通常会将编码标准误解为另一个标准,并且替换character用于替换未知或误解的字符。
要解决您的问题,您需要告诉读者使用特定的字符编码来读取您的文件,例如SOME-CHARSET
。
替换它:
InputStreamReader input = new InputStreamReader(fileStream);
用这个:
InputStreamReader input = new InputStreamReader(fileStream, "SOME-CHARSET");
答案 1 :(得分:0)
您的问题几乎可以肯定是您正在使用的编码方案。您可以使用所需的大多数编码方案读取文件。告诉Java您的输入是如何编码的。 UTF-8在Linux上很常见。 Windows原生是CP-1250。
如果您正在处理在其他操作系统上创建的文件,这就是您一直遇到的问题。
答案 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; }
}