如何将UTF8字符串转换为UTF16

时间:2012-11-16 07:26:53

标签: 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);
  }

2 个答案:

答案 0 :(得分:9)

如果服务器的字节看起来像S\0a\0m\0p\0l\0e,则 UTF-8。它们是UTF-16。您可以使用以下命令将UTF16字节转换为Java String

byte[] bytes = ...
String string = new String(bytes, "UTF-16");

如果您知道来自服务器的字节流的字节序,则可以使用UTF-16LEUTF-16BE作为字符集名称。

如果你已经(错误地)从字节中构造了一个String,就好像它是UTF-8一样,你可以转换为UTF-16:

string = new String(string.getBytes("UTF-8"), "UTF-16");

然而,正如JB Nizet指出的那样,如果字节不是有效的UTF-8,则此往返(字节 - > UTF-8字符串 - >字节)可能是有损的。

答案 1 :(得分:0)

我提出以下解决方案:

  

NSString * line_utf16 [ENOUGH_MEMORY_SIZE];

     

line_utf16 = [NSString stringWithFormat:@“%s”,line_utf8];

     

ENOUGH_MEMORY_SIZE至少超过用于line_utf8的内存的两倍

我想为      line_utf16   必须动态或静态分配至少两倍的大小      line_utf8

如果遇到类似的问题,请添加几句话!