有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将字符串从ansi/十六进制字符串转换为unicode

我对字符串转换器有问题

我从url中读取内容

http://suggestqueries.google.com/complete/search?client=firefox&hl=us&ds=yt&q=spinner

控制台中的结果是

[“纺纱工”,“纺纱工技巧”,“纺纱工烦躁”,“纺纱工越南”,“纺纱工技能”,“纺纱工玩具”,“纺纱工烦躁玩具”,“纺纱工vn”,“纺纱工手”,“纺纱工vi\u1EC7t nam”]

它包含字符串“spinner vi\u1EC7t nam”,但当操作系统读取它时,我看到“vi”ệ“南”

问题是我如何阅读api的内容才能看到“vi”ệ因此,t nam

下面是我的原始代码

```

    URL url = new URL("http://suggestqueries.google.com/complete/search?client=firefox&hl=us&ds=yt&q=spinner");
    URLConnection urlConnection = url.openConnection();
    urlConnection.connect();
    InputStream inputStream = urlConnection.getInputStream();

    InputStreamReader reader      = new InputStreamReader(inputStream);
    BufferedReader bufferedReader = new BufferedReader(reader);
    String line;
    while((line=bufferedReader.readLine()) != null){
        System.out.println(line);
    }
    bufferedReader.close();
    reader.close();

```


共 (1) 个答案

  1. # 1 楼答案

    试试这个

    static final Pattern UNICODE = Pattern.compile("\\\\u([0-9a-fA-F]{4})");
    
    static String decodeUnicodeEscape(String s) {
        Matcher m = UNICODE.matcher(s);
        StringBuffer sb = new StringBuffer();
        while (m.find())
            m.appendReplacement(sb,
                String.valueOf((char)Integer.parseInt(m.group(1), 16)));
        m.appendTail(sb);
        return sb.toString();
    }
    

    System.out.println(decodeUnicodeEscape(" vi\\u1EC7t nam"));
    

    结果

     việt nam