需要帮助识别 UTF 编码的类型



我很难弄清楚我需要转换的 unicode 类型才能为后请求传递数据。大多数是汉字。

示例字符串:

的事故事务院治党派驻地是不是

预期的 Unicode: %u7684%u4E8B%u6545%u4E8B%u52A1%u9662%u6CBB%u515A%u6D3E%u9A7B%u5730%u662F%u4E0D%u662F

尝试编码为 UTF16-BE:%76%84

%4E%8B%65%45%4E%8B%52%A1%5C%40%5C%40%95%7F%67%1F%8D%27%7B%49%5F%85%62%08%59%1AUTF-16 中的编码文本:%FF%FE%84%76%8B%4E%45%65%8B%4E%A1%52%62%96%BB%6C%5A%51%3E%6D%7B%9A%30%57%2F%66%0D%4E%2F%66

UTF-8 中的编码文本:%E7

%9A%84%E4%BA%8B%E6%95%85%E4%BA%8B%E5%8A%A1%E9%99%A2%E6%B2%BB%E5%85%9A%E6%B4%BE%E9%A9%BB%E5%9C%B0%E6%98%AF%E4%B8%8D%E6%98%AF如您所见,UTF16-BE 是最接近的,但它只需要 2 个字节,并且每个字符前面应该有一个额外的 %u,如预期的 unicode 所示。

我一直在使用 URLEncoder 方法来获取编码的文本,使用标准字符集编码,但它似乎没有返回预期的 unicode。

法典:

String text = "的事故事务院治党派驻地是不是";
URLEncoder.encode(text, "UTF-16BE");

正如卡亚曼在评论中所说:你的期望是错误的。

这是因为%uNNNN不是 Unicode 文本的有效 URL 编码。正如维基百科所说:

Unicode 字符存在一种非标准编码:%uxxxx,其中xxxx是一个 UTF-16 代码单元,表示为四个十六进制数字。此行为未由任何 RFC 指定,并且已被 W3C 拒绝。

因此,除非你的服务器是预期的非标准输入,否则你的期望是错误的。

请改用 UTF-8。正如维基百科所说:

通用 URI 语法要求在 URI 中提供字符数据表示形式的新 URI 方案实际上必须表示未保留集中的字符而不进行转换,并且应根据 UTF-8 将所有其他字符转换为字节,然后对这些值进行百分比编码。此要求于 2005 年 1 月随着 RFC 3986 的发布而引入。在此日期之前引入的 URI 方案不受影响。

但是,这是用于在URL中发送数据,例如作为GET的一部分。

有关将文本数据作为application/x-www-form-urlencoded编码POST的一部分发送,请参阅 HTML5 文档:

  • 如果form元素具有accept-charset属性,则让所选字符编码成为为表单选择编码的结果。

  • 否则,如果form元素没有accept-charset属性,但文档的字符编码是与 ASCII 兼容的字符编码,则这就是所选字符编码。

  • 否则,让所选字符编码为 UTF-8。

由于现在大多数网页("文档"(都是以 UTF-8 呈现的,这可能意味着 UTF-8。

我认为你想得太远了。文本的编码不需要以任何方式"类似于"此文本的 Unicode 代码点字符串。这是两回事。

要在 POST 请求中发送字符串的事故事务院治党派驻地是不是,只需编写整个 POST 请求并使用 UTF-8 对其进行编码,生成的字节就是作为 POST 请求正文发送到服务器的字节。

正如@Andreas所指出的,UTF-8 是 HTML5 的默认编码,因此甚至不需要设置accept-charset属性,因为服务器会自动使用 UTF-8 来解码您的请求正文,如果未设置accept-charset

最新更新