我通过处理客户端应用程序发送的请求获得UTF8字符串.但字符串真的是UTF16.我能做些什么才能将它变成我的本地字符串是一个字母后跟\0字符?我需要将该String转换为UTF16.
样本接收字符串: S\0a\0m\0p\0l\0e(UTF8).
我想要的是:Sample(UTF16)
FileItem item = (FileItem) iter.next();
String field = "";
String value = "";
if (item.isFormField()) {
try{
value=item.getString();
System.out.println("====" + value);
}
Run Code Online (Sandbox Code Playgroud)
Ted*_*opp 10
如果它们看起来像服务器的字节不是 UTF-8 S\0a\0m\0p\0l\0e.它们是UTF-16.您可以使用以下命令将UTF16字节转换为Java String:
byte[] bytes = ...
String string = new String(bytes, "UTF-16");
Run Code Online (Sandbox Code Playgroud)
或者,如果您知道来自服务器的字节流的字节序,则可以使用UTF-16LE或UTF-16BE作为字符集名称.
如果你已经(错误地)String从字节构造了一个像UTF-8一样的东西,你可以用以下代码转换为UTF-16:
string = new String(string.getBytes("UTF-8"), "UTF-16");
Run Code Online (Sandbox Code Playgroud)
但是,正如JB Nizet指出的那样,如果字节不是UTF-8,那么这个往返(字节 - > UTF-8字符串 - >字节)可能是有损的.