我通过处理客户端应用程序发送的请求来获取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);
}
答案 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-16LE
或UTF-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 。
如果遇到类似的问题,请添加几句话!