5

我通过处理客户端应用程序发送的请求来获取 UTF8 字符串。但该字符串实际上是 UTF16。我该怎么做才能将它放入我的本地字符串中是一个字母后跟\0字符?我需要将该字符串转换为 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);
  }
4

2 回答 2

18

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

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

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

如果您已经(错误地)String从字节构造 a 就好像它是 UTF-8 一样,您可以使用以下命令转换为 UTF-16:

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

但是,正如 JB Nizet 指出的那样,如果字节不是有效的 UTF-8 开头,则此往返(字节 -> UTF-8 字符串 -> 字节)可能会丢失。

于 2012-11-16T07:30:08.260 回答
0

我提出以下解决方案:

NSString *line_utf16[ENOUGH_MEMORY_SIZE];

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

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

我想 line_utf16 的内存必须动态或静态分配至少是 line_utf8大小的两倍。

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

于 2018-10-11T14:49:34.543 回答