2

我正在编写代码来处理来自维基百科的文本,并且遇到了破折号乱码的问题。我以前没有使用过破折号或其他非标准字符(对我来说是非标准的字符,不会出现在我的键盘上;),所以我不确定在哪里指向我的手指做错了。这是正在发生的事情,以及代码片段......

我向 Wikipedia 发送请求(我使用 Apache HttpComponents 客户端 API 与 Wikipedia 进行通信)以获取文章的内容并将其保存在字符串中:

DefaultHttpClient client = new DefaultHttpClient();
HttpGet queryRequest = new HttpGet(query);  // query is the URL for retrieving the article contents.
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = client.execute(queryRequest, responseHandler);

此时,如果我要向 System.out 发送“responseBody”,则短划线会在我的 Eclipse 控制台中显示为“?”。这可能只是一个 Eclipse 控制台显示问题,所以我将继续。

我处理文本,忽略短划线,然后将文本发送回维基百科。

List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("text", content);  // content is a String with the article text
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams, "UTF-8");
HttpPost queryRequest = new HttpPost(url);  // url is the basic URL for the Wikipedia api
queryRequest.setEntity(entity);
queryRequest.addHeader("Content-Type", "application/x-www-form-urlencoded");
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = client.execute(queryRequest, responseHandler);

当现在上传到维基百科的文本显示在网络浏览器中时,之前的破折号现在显示为“?” 在一个盒子里(未知字符?)。因此,在某处我无意中更改或错误编码了破折号,但我不确定确切的位置。

有人可以指出我正确的方向吗?

4

2 回答 2

1

现在来看看真正的答案。非英文字符被破坏的问题与 Apache HTTPComponents 或 Java 字符串处理/操作无关。问题在于在 Windows 上运行的 Eclipse IDE。

运行配置中的 Eclipse 默认使用系统的默认编码方法,Cp1252 for Windows。由于 Cp1252 不支持所有的 UTF-8 字符,因此出现了问题。我在这里找到了解决方案。在 Eclipse 中,您进入运行配置。对于您尝试运行的项目,请转到“通用”选项卡。有一个编码部分。将其从“默认”更改为“其他”并将编码设置为 UTF-8。

现在一切都很好。

于 2011-07-04T23:47:17.807 回答
0

我还没有弄清楚为什么 endash 会被破坏。与此同时,我确实有一个(可能是笨拙的)修复。

String unknownUTF = String.copyValueOf(Character.toChars(65533));
content = content.replace(unknownUTF, "\u2013");

我基本上用 endash 字符替换了“未知”UTF-8 字符的所有实例。假设原始内容不包含任何其他被转换为“未知”字符的 UTF-8 字符,则此方法有效。

于 2011-07-02T19:16:00.353 回答