编码给出了日本汉字的错误价值

时间:2014-06-08 23:32:54

标签: python-2.7 cjk

作为刮刀的一部分,我需要将kanji编码为网址,但我似乎无法通过简单的符号获得正确的输出,而我目前是盲目的到目前为止,我已经尝试了各种Stack Overflow帖子。

文档设置为UTF-8。

sampleText=u'ル'

print sampleText
print sampleText.encode('utf-8')
print urllib2.quote(sampleText.encode('utf-8'))

它给了我价值观:

ル
ル
%E3%83%AB

但据我了解,它应该给我:

ル
XX
%83%8B

我做错了什么?有些设置我不正确吗?因为据我所知,encode()的输出不应该是ル

1 个答案:

答案 0 :(得分:2)

您显示的代码正常工作。字符KATAKANA LETTER RU,是Unicode代码点U+30EB。当编码为UTF-8时,您将获得Python字节串'\xe3\x83\xab',如果您的控制台编码为ル,则打印出Latin-1。当您对这三个字节进行URL转义时,您将获得%E3%83%AB

您似乎期望的值,%83%8B的Shift-JIS编码,而不是UTF-8编码。很长一段时间没有关于如何在URL中编码非ASCII文本的标准,as this Wikipedia section notes,许多程序只是假设一种特定的编码(通常没有指定它)。然而,较新的Internationalized Resource Identifiers (IRIs)标准表示在执行百分比编码之前,应始终将Unicode文本转换为UTF-8字节。

因此,如果您要为想要符合当前标准的新程序生成编码字符串,请坚持使用您现在获得的UTF-8值。我只会使用Shift-JIS版本,以便向后兼容特定的旧网站或其他希望您发送的数据具有该编码的软件。如果您对服务器(或其他程序)有任何影响,请查看是否可以更新它以使用IRI!