我正在开发一个使法律在线的应用程序,并自动对其进行解析和格式化以适合该应用程序。我正在使用的测试网站是
http://www.planalto.gov.br/ccivil_03/constituicao/constituicao.htm
我想获取该URL的所有内容,解析(也许是干净的)并将它们放入文件中。我正在使用Jsoup,这是我用来连接内容并将其打印到文件的Runnable:
class FetchHtmlRunnable implements Runnable {
String url;
FetchHtmlRunnable(String url) {
this.url = url;
}
@Override
public void run() {
try {
Document doc = Jsoup.parse(new URL(url), 10000);
doc.charset(Charset.forName("windows-1252"));
Charset charset = doc.charset();
String htmlString = Jsoup.clean(doc.toString(), new Whitelist());
Log.d(TAG, "run: HTMLSTRING: " + htmlString);
String root = context.getFilesDir().toString();
file = new File(root + File.separator + "law.txt");
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file, false), charset);
out.write(htmlString);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
但是,即使Chrome浏览器告诉我该网站的编码是Windows-1252,日志条目和文件中不仅填充了替换字符(带有变音符号的所有字符都丢失了,例如í和ã),它也丢失了所有新行:
Constitui��o Presid�ncia da Rep�blica Casa Civil Subchefia para Assuntos Jur�dicos CONSTITUI��O DA REP�BLICA FEDERATIVA DO BRASIL DE 1988 Vide Emenda Constitucional n� 91, de 2016 Vide Emenda Constitucional n� 106, de 2020 Vide Emenda Constitucional n� 107, de 2020 Emendas Constitucionais Emendas Constitucionais de Revis�o Ato das Disposi��es Constitucionais Transit�rias Atos decorrentes do disposto no � 3� do art. 5� �NDICE TEM�TICO Texto compilado PRE�MBULO N�s, representantes do povo brasileiro, reunidos em Assembl�ia Nacional Constituinte para instituir um Estado Democr�tico, destinado a assegurar o exerc�cio dos direitos sociais e individuais, a liberdade, a seguran�a, o bem-estar, o desenvolvimento, a igualdade e a justi�a como valores supremos de uma sociedade fraterna, pluralista e sem preconceitos, fundada na harmonia social e comprometida
也许Web开发人员中的某个更好的人可以告诉我网页itlef是否存在问题,以及如何解决该问题……以及如何保留换行符。
答案 0 :(得分:2)
我将在短短的一秒钟内用葡萄牙语,西班牙语(和中文)写出关于字符集的答案的其余部分...不过,首先,我要说的是您要阅读的页面-实际上是加载了使用 "AJAX / JS"
的页面。我可以使用自己的Internet上的库下载 AJAX
,但是还需要其他工具,例如Selenium
,Puppeteer
或Splash
。不提及字符集,首先如何将“巴西宪法”的内容下载到HTML?当我尝试直接的HTML下载程序(不执行脚本)时,我得到了一堆Java脚本,而这些葡萄牙语根本没有任何葡萄牙语-它看起来根本不像您的问题中张贴的HTML。 :)
如果您已经在下载HTML,并且只对字符集有疑问,请阅读以下答案。如果除了AJAX / JavaScript调用之外,您无法下载其他任何内容-我可以发布另一个答案,以另一答案解释在一行或两行中执行JS / AJAX的过程。 (本质上,您发布的内容与我得到的输出不同)。
在99.9999%的情况下,如果它不是直接向上 "ASCII"
(因为它具有外语字符),则(几乎)保证可以使用一个版本来读取它 "UTF-8"
的字符集。我翻译西班牙新闻文章和中文新闻文章- UTF-8
始终对我有用。我有一个西班牙语站点,该站点期望使用名为 "iso8859-1"
的编码,但是除了找到它的“ Don Quijote de La Mancha”站点以外,它都可以使用-UTF8。
说实话,这根本不是问题,因为 阅读网页 (而不是编写网页)时,Java会自动解析文本,就像没有任何配置的UTF-8一样。这是我编写的库中的“打开连接”方法主体:
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod ("GET");
if (USE_USER_AGENT) con.setRequestProperty ("User-Agent", USER_AGENT);
return new BufferedReader (new InputStreamReader(con.getInputStream()));
这是我的库中“抓取内容”方法的方法主体:
URL url = new URL("http://www.planalto.gov.br/ccivil_03/constituicao/constituicao.htm");
StringBuilder sb = new StringBuilder();
String s;
BufferedReader br = Scrape.openConn(url);
while ((s = br.readLine()) != null) sb.append(s + "\n");
FileRW.writeFile(sb.toString(), "page.html");
老实说,我不了解Microsoft字符集的第一件事。我已经在UNIX中进行编码,而且我从不担心任何字符集-除了确保在编写HTML时 (而不是 阅读HTML ),则HTML <META CHARSET="utf-8">
元素已插入我的页面。