javaweb项目中的字符编码

javaweb项目中的字符编码,java,character,encode,webproject,Java,Character,Encode,Webproject,我在JavaWeb项目中遇到了一个奇怪的编码问题 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主函数中测试了上面的代码,在中文中它工作正常 output:

我在JavaWeb项目中遇到了一个奇怪的编码问题

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主函数中测试了上面的代码,在中文中它工作正常

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"));
以上两个都可以。那为什么呢?
任何建议都将不胜感激,真的谢谢

jvm和tomcat jvm之间的默认字符集不同

试一试

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

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

因此,当字节数组是utf-8时,解码器可能会期望其他东西。

您在上一个示例中期望发生什么?GBK和GB2312都是有效的字符编码。searchURL来自哪里?它是在Servlet中获得的吗?searchURL=新字符串(searchURL.getBytes(“utf-8”),“utf-8”);这样,它不是将searchURL更改为utf-8格式吗?@santi:我添加了一个clarification@santi:java字符串总是
utf-16
。getBytes生成的字节数组将是
utf-8
,但一旦它变成
字符串
,它将使用指定的字符集解码回
utf-16
。你说得对,真的谢谢。但是我已经设置了tomcat服务器xml。如何更改tomcat中的默认字符集?我是tomcat的新手,我的道歉
System.out.println("test===" + new String(searchURL.getBytes("utf-8")));