如何将UTF8转换为Unicode
我尝试将UTF8字符串转换为Java Unicode字符串。
String question = request.getParameter("searchWord"); byte[] bytes = question.getBytes(); question = new String(bytes, "UTF-8");
输入是中文字符,当我比较每个字符的hex代码时,它是相同的中文字符。 所以我很确定charset是UTF8。
我哪里出错了?
在Java中没有“UTF-8字符串”这样的东西。 一切都是Unicode。
当你调用String.getBytes()
而不指定编码时,它使用平台默认编码 – 这几乎总是一个坏主意。
你不应该做任何事来在这里找到合适的人物 – 请求应该为你处理。 如果它没有这样做,那么很可能它已经丢失了数据。
你能举一个实际出错的例子吗? 指定您正在接收的字符串中的字符的Unicode值(例如,使用toCharArray()
,然后将每个char
转换为int
)以及您希望接收的内容。
编辑:要诊断这个,使用这样的东西:
public static void dumpString(String text) { for (int i = 0; i < text.length(); i++) { System.out.println(i + ": " + (int) text.charAt(i)); } }
请注意,这将给出每个Unicode字符的十进制值。 如果你有一个方便的hex库方法,你可能想用它来给你hex值。 重点是它会将Unicode字符转储到字符串中。
首先确保数据实际编码为UTF-8。
关于发送HTML表单数据时使用的编码,浏览器之间存在一些不一致。 从Web表单发送UTF-8编码数据的最安全方法是将该表单放在使用Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
标头或包含元标记。
现在,在第一次调用request.getParameter()
之前,正确解码servlet中的数据调用request.setCharacterEncoding("UTF-8")
request.getParameter()
。
servlet容器为您处理编码。 如果你正确使用setCharacterEncoding()
,你可以期望getParameter()
返回普通的Java字符串。
此外,您可能需要一个特殊的filter来处理您的请求的编码。 例如,这样的filter存在于spring框架org.springframework.web.filter.CharacterEncodingFilter
String question = request.getParameter("searchWord");
就是你需要在你的servlet代码中做的一切。 此时你不必处理编码,字符集等。这些都是由servlet-infrastucture处理的。 当您发现显示 ,?,某处等问题时,客户端发送的请求可能有问题。 但是,如果不了解基础设施或记录的HTTP流量,就很难分辨出什么是错误的。
可能。
question = new String(bytes, "UNICODE");