有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

URL编码的java问题<>utf8<>iso

我遇到了一个奇怪的问题,涉及一个无法在本地复制的web调用

我正在测试一个必须设置为接收UTF-8字符的web服务。到目前为止,我所做的测试并没有取得成效。以下是我作为参数发送的示例:

Nestlé and Mötley Crüe

但我得到的参数如下:

Nestlé and Mötley Crüe

请注意,这正是我调用request.getParameter()时得到的结果。我已经完成了必要的步骤,以确保在它进入我的servlet(通过Tomcat 7)之前,所有内容都被编码为UTF-8。我所有的研究都告诉我,从UTF-8到ISO-8859-1,这是一个常规编码问题。问题是,ISO-8859-1在这个系统的任何方面都不存在(系统的默认文件编码是UTF-8,帖子的正文编码是UTF-8)

所以我想我应该在当地的环境中稍微摆弄一下,试着想出一个解决方案。下面是输出的转储,并对正在发生的事情进行了一些描述

normal: Nestlé and Mötley Crüe
encoded (utf): Nestl%C3%A9+and+M%C3%B6tley+Cr%C3%BCe
encoded (iso): Nestl%E9+and+M%F6tley+Cr%FCe
normal utf bytes: [4E, 65, 73, 74, 6C, C3, A9, 20, 61, 6E, 64, 20, 4D, C3, B6, 74, 6C, 65, 79, 20, 43, 72, C3, BC, 65]
normal iso bytes: [4E, 65, 73, 74, 6C, E9, 20, 61, 6E, 64, 20, 4D, F6, 74, 6C, 65, 79, 20, 43, 72, FC, 65]
utf bytes to utf string: Nestlé and Mötley Crüe
utf bytes to iso string: Nestlé and Mötley Crüe
iso bytes to utf string: Nestl? and M?tley Cr?
iso bytes to iso string: Nestlé and Mötley Crüe

第一行是我发送的内容,以及我希望收到的内容

接下来两个是分别将URLEncoder.encode与UTF-8和ISO-8859-1结合使用的结果

之后的两个是第一行中字符串的每个字节的十六进制代码。显然,UTF-8中的é用两个字节(C3,A9)表示,而ISO中用一个字节(E9)表示

接下来的4行是我用不同的编码制作新字符串的一些测试(字面意思是^{

所以这一切都很好,而且是预期的行为,尽管是局部的。另外,我注意到UTF->;ISO行正是我看到的,所以我摆弄servlet代码将其视为ISO,因为UTF一直不起作用。当我设置servlet代码来实现这一点时,我的结果如下:

description: Nestlé and Mötley Crüe
url iso enc: Nestl%E9+and+M%F6tley+Cr%FCe
url iso dec: Nestlé and Mötley Crüe
bytes (UTF): [4E, 65, 73, 74, 6C, C3, A9, 20, 61, 6E, 64, 20, 4D, C3, B6, 74, 6C, 65, 79, 20, 43, 72, C3, BC, 65]
bytes (ISO): [4E, 65, 73, 74, 6C, E9, 20, 61, 6E, 64, 20, 4D, F6, 74, 6C, 65, 79, 20, 43, 72, FC, 65]
utf bytes to utf string: Nestlé and Mötley Crüe
utf bytes to iso string: Nestlé and Mötley Crüe
iso bytes to utf string: Nestl� and M�tley Cr�
iso bytes to iso string: Nestlé and Mötley Crüe

这么多的差异!在这个输出中,第二行和第三行是我尝试在ISO中对值进行URL编码,然后在ISO中对其进行解码的地方

现在让我困惑的是,这个系统是如何计算ISO-8859-1中的字节E9以某种方式导致é的。还有servlet代码的转换方法到底是怎么回事,为什么它们与本地示例有根本性的不同

ISO中的E9é

ISO中的C3Ã

ISO中的A9©

UTF中的E9根据这些字节->;字符串方法

UTF中的C3 A9é

任何帮助或见解都会很好


共 (0) 个答案