我很难弄清楚我需要转换为传递数据以获取帖子请求的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%5℃%40%95%7F%67%1F%8D%27%7B%49%5F%85%62 %08%59%1A
UTF-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");
答案 0 :(得分:0)
正如卡亚曼在评论中所说:你的期望是错误的。
这是因为%uNNNN
不是Unicode文本的有效URL编码。正如Wikipedia says it:
Unicode字符存在非标准编码:
%uxxxx
,其中xxxx
是UTF-16代码单元,表示为四个十六进制数字。 此行为未由任何RFC指定,并已被W3C拒绝。
因此,除非您的服务器是非标准输入,否则您的期望是错误的。
相反,请使用UTF-8。正如Wikipedia says it:
通用URI语法要求在URI中提供字符数据表示的新URI方案实际上必须表示来自未保留集的字符而不进行转换,应将所有其他字符转换为字节。 UTF-8,然后对这些值进行百分比编码。此要求于2005年1月推出,随着RFC 3986的发布。在此日期之前引入的URI方案不受影响。
然而,这是用于在URL中发送数据,例如作为GET
的一部分。
要发送文本数据作为application/x-www-form-urlencoded
编码POST
的一部分,请参阅HTML5 documentation:
如果
form
元素具有accept-charset
属性,请将选定的字符编码作为选择表单编码的结果。否则,如果
form
元素没有accept-charset
属性,但文档的字符编码是ASCII兼容的字符编码,那么这就是所选的字符编码。否则,让所选字符编码为UTF-8。
由于大多数网页(“文档”)最近以UTF-8呈现,这可能意味着UTF-8。
答案 1 :(得分:0)
我认为你的想法太过分了。文本的编码不需要"类似于"以任何方式,本文的Unicode代码点串。这是两件不同的事情。
要在POST请求中发送字符串的事故事务院治党派驻地是不是
,只需编写整个POST请求并使用UTF-8对其进行编码,结果字节将作为POST请求的主体发送到服务器。
正如@Andreas所指出的,UTF-8是HTML5的默认编码,因此甚至不需要设置accept-charset
属性,因为服务器会自动使用UTF-8进行解码如果未设置accept-charset
,请求的正文。