怎么可能对字符串进行两次编码?

2024-09-30 22:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python程序员(当然现在也是),所以我熟悉Python编码和解码。

我很惊讶Java可以连续两次编码字符串变量。

以下是示例代码:

import java.net.URLEncoder;

public class OpenAPITest {
    public static void main(String[] arg) throws Exception {
        String str = "안녕";   // Korean
        String utfStr = URLEncoder.encode(str, "UTF-8");
        System.out.println(utfStr);
        String ms949Str = URLEncoder.encode(utfStr, "MS949");
        System.out.println(ms949Str);
    }
}

我想知道它怎么能把字符串编码两次。

在Python版本3.x中,一旦编码了由unicode字符串组成的type 'str',那么它就转换成由字节字符串组成的type 'byte'type 'byte'只有decode()功能。

另外,我希望在Python3中获得与示例代码中ms949Str的结果值相同的字符串值。请给我一些建议。谢谢。在


Tags: 字符串代码示例编码stringtypepublicout
1条回答
网友
1楼 · 发布于 2024-09-30 22:13:50

我不知道Python,而且你没有说你使用的是什么Python方法,但是如果Python方法将Python字符串转换成UTF-8字节序列,那么你在这里使用了错误的转换方法,因为这与URL编码无关。在

str.getBytes("UTF-8")将返回一个byte[],Java字符串编码在UTF-8中。在

new String(bytes, "UTF-8")将对字节数组进行解码。在


URL编码是将文本转换成一个字符串,该字符串作为完整URL的组件有效,这意味着所有特殊字符都必须使用%NN转义符进行编码。非ASCII字符也必须编码。在

以字符串Test & gehört为例。当URL编码时,它将变成以下字符串

Test+%26+geh%C3%B6rt

当与getBytes一起使用时,字符串Test & gehört将成为以下字节序列(以十六进制显示):

^{pr2}$

相关问题 更多 >