2013-01-23 10 views
0

Я просто получаю странную проблему кодирования в веб-проекте java.кодировка символов в java веб-проекте

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 

Но при выполнении этого кода в коте.

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 

тогда я проверить это в котом:

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")); 

как выше, так это нормально. так почему? Любое предложение будет оценено, действительно thx!

+1

Что вы ожидали от своего последнего примера? Оба GBK и GB2312 являются действительными кодировками символов. – Perception

+0

Откуда взялся поискURL? Получено ли это в Servlet? –

ответ

0

кодировка по умолчанию будет отличаться между JVM и котом Jvm

попробовать

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

это будет использовать кодировку по умолчанию для кодирования строки, которая может или не может быть UTF-8

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

поэтому, когда массив байтов является utf-8, декодер может ожидать чего-то еще.

+0

searchURL = new String (searchURL.getBytes ("utf-8"), "utf-8"); этим он не изменяет формат searchURL в utf-8? – santi

+0

@santi: Я добавил разъяснение – BevynQ

+0

@santi: строки java всегда 'utf-16'. Байт-массив, созданный getBytes, будет 'utf-8', но как только он превратится в' String', он будет декодирован обратно на 'utf-16', используя указанную кодировку. – BevynQ

Смежные вопросы