当前位置: 首页 > 面试题库 >

Java UTF-8编码未设置为URLConnection

酆俊远
2023-03-14
问题内容

我正在尝试从http://api.freebase.com/api/trans/raw/m/0h47检索数据

正如您在文本中看到的那样,这里有一些唱歌: /ælˈdʒɪəriə/

当我尝试从页面获取源代码时,我会听到带有诸如此类的文字ú

到目前为止,我已经尝试使用以下代码:

urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

我究竟做错了什么?

我的整个代码:

URL url = null;
URLConnection urlConn = null;
DataInputStream input = null;
try {
url = new URL("http://api.freebase.com/api/trans/raw/m/0h47");
} catch (MalformedURLException e) {e.printStackTrace();}

try {
    urlConn = url.openConnection(); 
} catch (IOException e) { e.printStackTrace(); }
urlConn.setRequestProperty("Accept-Charset", "UTF-8");
urlConn.setRequestProperty("Content-Type", "text/plain; charset=utf-8");

urlConn.setDoInput(true);
urlConn.setUseCaches(false);

StringBuffer strBseznam = new StringBuffer();
if (strBseznam.length() > 0)
    strBseznam.deleteCharAt(strBseznam.length() - 1);

try {
    input = new DataInputStream(urlConn.getInputStream()); 
} catch (IOException e) { e.printStackTrace(); }
String str = "";
StringBuffer strB = new StringBuffer();
strB.setLength(0);
try {
    while (null != ((str = input.readLine()))) 
    {
        strB.append(str); 
    }
    input.close();
} catch (IOException e) { e.printStackTrace(); }

问题答案:

HTML页面采用UTF-8,并且可以使用阿拉伯字符等。但是Unicode
127以上的字符仍被编码为数字实体,如ú。因为UTF-8是完全正确的,所以Accept-Encoding不会,没有帮助和无法加载。

您必须自己解码实体。就像是:

String decodeNumericEntities(String s) {
    StringBuffer sb = new StringBuffer();
    Matcher m = Pattern.compile("\\&#(\\d+);").matcher(s);
    while (m.find()) {
        int uc = Integer.parseInt(m.group(1));
        m.appendReplacement(sb, "");
        sb.appendCodepoint(uc);
    }
    m.appendTail(sb);
    return sb.toString();
}

顺便说一下,这些实体可以源自处理过的HTML表单,因此在Web应用程序的编辑方面也是如此。

有问题的代码之后:

我已经用(Buffered)Reader替换了文本的DataInputStream。InputStreams读取二进制数据,字节;读者文本,字​​符串。InputStreamReader具有InputStream和编码作为参数,并返回Reader。

try {
    BufferedReader input = new BufferedReader(
            new InputStreamReader(urlConn.getInputStream(), "UTF-8")); 
    StringBuilder strB = new StringBuilder();
    String str;
    while (null != (str = input.readLine())) {
        strB.append(str).append("\r\n"); 
    }
    input.close();
} catch (IOException e) {
    e.printStackTrace();
}


 类似资料:
  • 问题内容: 下面是我的代码,它打算获取两个.ckl文件,比较两个文件,添加新项目并创建一个新的合并文件。该程序在Netbeans中运行时可以正确执行,但是,当执行.jar时,该程序似乎未使用UTF-8编码文件。我对编程很陌生,想知道在什么地方或如何执行这种编码? **我删除了Swing代码和其他行,以便仅显示我的方法,该方法完成所有比较和合并。 问题答案: Java具有广泛的,内容丰富的文档。保留

  • 问题内容: 他们在“ PHP Cookbook”中说(第589页),要将传出数据的char编码正确设置为utf-8,必须将配置编辑为utf-8。 但是,我在中找不到此配置。我是否应该简单地添加一行内容? 我有一个。如您所见(),目前尚未激活。我应该删除分号并将其设置为吗?这样可以处理默认编码吗? 我还发现了其他我不知道该怎么做的编码指令: 有什么原因为什么我不能简单地将它们全部替换为? 问题答案:

  • 问题内容: 我有一个PHP脚本,名为: http://cyber- flick.com/apiMorpho.php?method=getMorphoData&word=kot 以纯文本显示一些数据: 如您所见,在适当的字符位置上有很多“忙碌”。我想做的是以某种方式显示此内容,以便人们在浏览器中看到正确的UTF-8字符。 您可以将其封装在HMTL标签中并以元UTF-8编码进行设置,但是由于将从该脚本

  • 问题内容: 这个问题已经在这里有了答案 : 使用FileWriter(Java)以UTF-8格式编写文件吗? (9个答案) 2年前关闭。 下面是我的代码,它打算获取两个.ckl文件,比较两个文件,添加新项目并创建一个新的合并文件。该程序在Netbeans中运行时可以正确执行,但是,当执行.jar时,该程序似乎未使用UTF-8编码文件。我对编程很陌生,想知道在什么地方或如何执行这种编码? **我删除

  • 控制台输出中的西里尔符号显示不正确。Jenkins正在Windows 7上运行Tomcat/8.5.11 Jenkins属性显示: file.encoding cp1251 sun.jnu.encoding cp1251 sun.stderr.encoding cp866 sun.stdout.encoding cp866 解决了:我在bin文件夹中创建了文件setenv.bat并设置java_o

  • 问题内容: 嗨,我有一个客户端正在尝试使用以下HTTP标头向我们发布: 但是,我们的Web应用程序防火墙会不断将其拾取并引发错误: 消息:[文件“ /etc/httpd/modsecurity.d/10_asl_rules.conf”] [行“ 45”] [id“ 340362”] [msg“ Atomicorp.com WAF规则:ModSecurity不支持内容编码并且无法检测到使用它攻击,因