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

Java 需要识别UTF编码类型的帮助吗,java,encoding,character-encoding,urlencode,Java,Encoding,Character Encoding,Urlencode,我很难找到需要转换为post请求传递数据的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%

我很难找到需要转换为post请求传递数据的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%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");

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

这是因为
%unnn
不是Unicode文本的有效URL编码。作为:

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

因此,除非您的服务器需要非标准输入,否则您的期望是错误的

相反,使用UTF-8。作为:

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

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

要将文本数据作为
应用程序/x-www-form-urlencoded
encoded
POST
的一部分发送,请参阅:

  • 如果
    表单
    元素具有
    接受字符集
    属性,则将所选字符编码作为为表单选择编码的结果

  • 否则,如果
    表单
    元素没有
    接受字符集
    属性,但是文档的字符编码是ASCII兼容的字符编码,那么这就是所选字符编码

  • 否则,将所选字符编码设为UTF-8


由于目前大多数网页(“文档”)都是以UTF-8格式呈现的,这可能意味着UTF-8。

我认为您考虑得太远了。文本的编码不需要以任何方式“类似”此文本的Unicode代码点字符串。这是两件不同的事情

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


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

您期望的可能重复项是错误的。@Kayaman这是我在chrome控制台中嗅探post请求时获取的unicode值。如果服务器正确解码数据,则看起来您希望使用UTF-16BE编码。你闻什么都没关系。我明白了,谢谢。因此,我必须将request属性设置为form urlencoded for post request。对于这种情况,如果我将字符集设置为接受UTF-8,我可以简单地发送UTF-8数据。这就是你的意思吗?