gpt4 book ai didi

java - 在Java字符串中保留unicode字符

转载 作者:行者123 更新时间:2023-12-01 16:58:42 27 4
gpt4 key购买 nike

我正在用java编写一个爬虫来爬取一些网站,这些网站可能有一些unicode字符,例如“£”。当我将内容(源 HTML)存储在 Java 字符串中时,这些类型的字符会丢失并被问号“?”替换。我想知道如何保持它们完好无损。相关代码如下:

protected String readWebPage(String weburl) throws IOException{
HttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet(weburl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
// responseBody now contains the contents of the page
httpclient.getConnectionManager().shutdown();
return responseBody;
}

// function call
String res = readWebPage(url);
PrintWriter out = new PrintWriter(outDir+name+".html");
out.println(res);
out.close();

后来在进行字符匹配时,我还希望能够执行以下操作:

if(text.indexOf("£")>=0)

我不知道 Java 是否会识别该字符并按照我想要的方式执行操作。

任何意见都将不胜感激。提前致谢。

最佳答案

您的非 ASCII 字符在 Java 输入或输出时丢失。

Java 在内部使用 Unicode 字符串,因此您必须告诉它如何解码输入和编码输出。

假设 HttpClient 正确解释来自远程服务器的响应并正确解码该响应。

接下来,您必须确保在将内容写入磁盘时正确编码。 Java使用本地环境变量来猜测要使用什么编码,这可能不合适。要强制编码,请将编码类型传递给 PrintWriter:

PrintWriter out = new PrintWriter(outDir+name+".html", "UTF-8");

然后使用以 UTF-8 模式运行的文本编辑器(例如 Notepad++)检查您的 output.html,以确保您仍然可以看到非 ASCII 字符。

如果不能,那么您需要将注意力转向输入 - HttpClient。请参阅这个答案:Set response encoding with HttpClient 3.1查找您的远程服务器是否在字符编码方面撒谎的线索。

回答你的子问题。如果您告诉 Java 您的源代码采用什么字符编码,则可以在源代码中使用非 ASCII 字符,例如“£”。这是 javac 的一个参数,但您可能会这样要使用 IDE,您只需在属性中设置文件的字符编码,IDE 将完成剩下的工作。最方便的做法是将 IDE 中的字符编码设置为“UTF-8”。 Eclipse 允许您为整个项目或单个文件设置字符编码。

关于java - 在Java字符串中保留unicode字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com