【问题标题】:Leading "?" symbol in UTF-8领导 ”?” UTF-8 中的符号
【发布时间】:2012-02-14 09:26:28
【问题描述】:

有一些文件 index.html(以 UTF-8 保存):

<html>
  <head></head>
  <body>
       <h1> THE TITLE </h1>     
       Please click <a href="url"> here </a>
       <br>  ... Some text... <br>    
       Image: <img  src="nature.png"/>    
       <br> ... Some another text... <br>    
        Image2: <img  src="nature2.png" />
   </body>
</html>

我需要获取包含在 BODY 标记内的所有文本,对其进行修改并保存。所以我喜欢这样:

    File input = new File("html/input.html");
    Document doc = Jsoup.parse(input, "UTF-8", "");     
    Elements body = doc.select("BODY");

    //do some manipulations with the data and print it
    System.out.println(body.html());

结果是:

?   
<h1> THE TITLE </h1> Please click 
<a href="url"> here </a> 
...

没关系,除了开头的问号。我怎样才能避免它? 当然我可以从结果字符串中删除它)但是我想了解这是怎么回事。

【问题讨论】:

  • ? 是否真的是 UTF-8 BOM(字节顺序标记)?
  • 是的,你是对的)。十六进制编辑器告诉它真的是 BOM。

标签: utf-8 html-parsing jsoup


【解决方案1】:

首先你需要制作一个能够理解UTF-8的PrintStream:

 PrintStream out = new PrintStream(System.out, true, "UTF-8");
 out.println(body.html());

然后尝试将输出重定向到一个文件,看看在读取为UTF-8时是否还有垃圾。

如果不是,那么您的控制台根本不是 UTF-8 并且不知道如何处理它。

【讨论】:

  • 如果重定向到一个文件,那么没有任何垃圾。所以控制台有问题。而且,正如 Keith Thompson 所说,这个符号实际上是 BOM。感谢您的帮助。
  • @user1117393 你永远不应该使用带有 UTF-8 的 BOM:这完全被破坏了。如果您有一个包含 10 个不同的 50 字符 UTF-8 行的文件,您需要能够运行 cat file file file &gt; triplicate 并获得一个正确的 30 行文件,该文件最后正好包含 1500 个字符。否则你就搞砸了。
猜你喜欢
  • 2020-06-04
  • 1970-01-01
  • 2011-07-17
  • 2017-10-28
  • 2016-06-10
  • 1970-01-01
  • 2020-04-22
  • 2014-08-06
  • 2018-01-30
相关资源
最近更新 更多