【问题标题】:How to convert UTF8 string to UTF16如何将 UTF8 字符串转换为 UTF16
【发布时间】:2012-11-04 22:01:35
【问题描述】:

我通过处理客户端应用程序发送的请求来获取 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);
  }

【问题讨论】:

  • 字符串是一个字符序列。仅当您将字符串转换为字节时,编码才重要,反之亦然(例如,在向文件写入或读取文件时)。给我们看一些代码,因为你想实现的目标还不清楚。
  • 不需要进行 UTF-16 或 UTF-8 转换

标签: java utf-8 utf-16


【解决方案1】:

如果来自服务器的字节看起来像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 字符串 -> 字节)可能会丢失。

【讨论】:

  • 我会说,如果他已经从字节构造了一个字符串,就好像它是 UTF-8 一样,那么就有一个错误,不应该这样做。每个字节序列都不是有效的 UTF-8,尝试将随机字节(或 UTF-16 字节)转换为 UTF8 字符串是一个潜在的有损过程。
【解决方案2】:

我提出以下解决方案:

NSString *line_utf16[ENOUGH_MEMORY_SIZE];

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

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

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

如果你遇到类似的问题,请补充几句话!

【讨论】:

  • 问题是关于如何在 Java 中进行转换。
猜你喜欢
  • 2014-02-24
  • 2016-09-04
  • 1970-01-01
  • 2020-09-18
  • 2012-02-01
  • 2012-02-13
  • 1970-01-01
  • 2014-01-29
  • 2012-07-17
相关资源
最近更新 更多