如何将UTF8字符串转换为UTF16

din*_*707 1 java utf-8 utf-16

我通过处理客户端应用程序发送的请求获得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-16LEUTF-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字符串 - >字节)可能是有损的.

  • 我会说,如果他已经从字节构造了一个字符串,好像它是UTF-8那么,那么就有一个错误,而且不应该这样做.每个字节序列都不是有效的UTF-8,并且尝试将随机字节(或UTF-16字节)转换为UTF8字符串是一个潜在的有损进程. (5认同)