怎么可能两次编码String?

时间:2016-02-04 06:56:46

标签: java python python-3.x encoding

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

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

这是示例代码:

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的结果值相同的字符串值。请给我一些建议。感谢。

1 个答案:

答案 0 :(得分:2)

不知道Python,除了你没有说你正在使用什么Python方法,但如果Python方法将Python字符串转换为d.write .format(csvFormat) .option("header", "true") .save(path) 字节序列,那么你使用的是错误的转换方法,因为这与网址编码无关。

UTF-8将返回str.getBytes("UTF-8"),其中包含byte[]中编码的Java字符串。

UTF-8将解码字节数组。

URL编码是指将文本转换为完整URL的组件有效的字符串,这意味着必须使用new String(bytes, "UTF-8")转义编码所有特殊字符。非ASCII字符也必须编码。

例如,取字符串%NN。 URL编码时,它将变为以下字符串

Test & gehört

Test+%26+geh%C3%B6rt 一起使用时,字符串Test & gehört成为以下字节序列(以十六进制显示):

getBytes