gpt4 book ai didi

java - Oracle Java 程序新开发的编码问题

转载 作者:行者123 更新时间:2023-11-29 05:23:41 24 4
gpt4 key购买 nike

我的 Java 程序(或更确切地说,它的一部分)向网络服务发送请求并接收 rdf 字符串,其中包括 unicode 中的古希腊单词。我在 netbeans 中编写程序,到目前为止,在 netbeans 环境和外部作为 Linux 和 Windows XP 下的独立 jar 运行时都没有问题。现在,突然间,rdf 中的希腊语单词像这样乱码了:

á¼€

起初,我以为这是Windows XP 的问题,但在Windows 7 下检查时问题依然存在。我发现我在 Linux 下运行 OpenJDK,并且能够使用 Oracle Java 重现该问题。这是相关代码(当然,我可能眼界比较狭隘,如果需要更多请告诉我):

try {
HttpClient client = new DefaultHttpClient();
HttpGet get;
get = new HttpGet(URL+URLEncoder.encode(form, "UTF-8"));

HttpResponse response = client.execute(get);
if (201 == response.getStatusLine().getStatusCode()) {
HttpEntity respEnt = response.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(respEnt.getContent()));
StringBuilder sb = new StringBuilder();
char[] cbuffer = new char[256];
int read;

while ((read = reader.read(cbuffer)) != -1) {
sb.append(cbuffer,0,read);
}
//System.out.println(sb.toString());
rdf = new String(sb.toString().getBytes("UTF-8"),"UTF-8");

} else {
System.err.println("HTTP Request fehlgeschlagen.");
}

} catch (IOException e) {
System.err.println("Problem beim HTTP Request.");
}

网络服务是 Perseus 形态学服务,可以在这里找到: http://services.perseids.org/bsp/morphologyservice/analysis/word?lang=grc&engine=morpheusgrc&word= .例如,尝试“word=μῆνιν”。 rdf 是如何或何时生成的,我真的不知道。

我将非常感谢您提供进一步的见解!

最佳答案

确保字符串的编码在客户端和服务器之间保持一致。在您的情况下,服务器响应(rdf-strings)当然是最重要的(编码服务端,在您的客户端代码中解码)。

关于您发布的客户端代码的一件事:您在此行中使用 InputStreamReader 的单参数构造函数:

BufferedReader reader = new BufferedReader(new InputStreamReader(respEnt.getContent()));

它将使用 VM(和系统)默认字符集从输入流中读取,因此结果将取决于您运行客户端应用程序的机器/VM。尝试使用此构造函数显式设置字符集

new InputStreamReader(url.openStream(), "UTF-8")

另见 API-doc .

在您的代码中搜索 InputStreamReaderOutputStreamWriter 的单参数构造函数的更多用途,它们也使用默认编码。

如果您无法控制服务器代码(网络服务实现),您可以尝试像这样找出答案字符集:

Header contentType = response.getFirstHeader("Content-Type");
String charset= contentType.getValue();

(这来自您似乎正在使用的 apache HttpClient API)。另见 this Q on SO .

关于java - Oracle Java 程序新开发的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23604115/

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