"En dash"在 HTTP 响应处理或文本操作期间出现乱码



我正在编写代码来处理维基百科中的文本,但遇到了连字符混乱的问题。我以前从未使用过连字符或其他非标准字符(对我来说,非标准字符是不出现在键盘上的字符;),所以我不知道该把矛头指向哪里。以下是正在发生的事情,以及代码片段。。。。。

我向维基百科发送一个请求(我使用ApacheHttpComponents客户端API与维基百科通信),请求一篇文章的内容,并将其保存在String:中

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);

此时,如果我要将"responseBody"发送到System.out,则在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);

当现在上传到维基百科的文本显示在网络浏览器中时,以前的短划线现在显示为"?"在一个框中(未知字符?)。因此,在某个地方,我无意中更改或错误编码了连字符,但我不确定具体在哪里。

有人能给我指正确的方向吗?

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

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

现在一切都很好。

我还没有弄清楚endash被破坏的原因。与此同时,我确实有一个(可能是笨拙的)解决方案。

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

我基本上将所有"未知"UTF-8字符替换为endash字符。假设原始内容不包含任何其他将被转换为"未知"字符的UTF-8字符,则此操作有效。

最新更新