0

我只是在 java web 项目中遇到了一个奇怪的编码问题。

System.out.println("search url: " + searchURL);    
searchURL = new String(searchURL.getBytes("utf-8"), "utf-8");
System.out.println("test===" + new String(searchURL.getBytes("utf-8")));

我在java main函数中测试了上面的代码,在汉字中它可以正常工作。

output:
search url: https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query=%27机器 猫%27&$format=json&$skip=0

test===https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query=%27机器 猫%27&$format=json&$skip=0

但是当在tomcat中运行这段代码时。

output:
search url: https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query=%27机器 猫%27&$format=json&$skip=0

test===https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query=%27鏈哄櫒 鐚?27&$format=json&$skip=0

然后我在tomcat中测试这个:

searchURL = new String(searchURL.getBytes("utf-8"), "utf-8");
System.out.println(new String(searchURL.getBytes("gbk"));
System.out.println(new String(searchURL.getBytes("gb2312"));

以上都可以。所以为什么 ?任何建议将不胜感激,真的谢谢!

4

1 回答 1

0

您的 jvm 和 tomcat jvm 之间的默认字符集会有所不同

尝试

System.out.println(Charset.defaultCharset());

这将使用默认字符集对可能是也可能不是 utf-8 的字符串进行编码

System.out.println("test===" + new String(searchURL.getBytes("utf-8")));

因此,虽然字节数组是 utf-8,但解码器可能会期待别的东西。

于 2013-01-23T04:57:51.673 回答