在Python中将JIS X 208代码转换为UTF-8
假设我有这个汉字亜 在JIS X 208代码中以十六进制形式表示:0x3021。我希望我的Python程序将该代码转换为UTF-8格式的E4BA9C,这样我就可以像这样将编码的字符串URL传递到我的URL中在Python中将JIS X 208代码转换为UTF-8,python,encoding,standards,data-conversion,Python,Encoding,Standards,Data Conversion,假设我有这个汉字亜 在JIS X 208代码中以十六进制形式表示:0x3021。我希望我的Python程序将该代码转换为UTF-8格式的E4BA9C,这样我就可以像这样将编码的字符串URL传递到我的URL中 我使用的是Python2.7.12,但我也对Python3解决方案持开放态度这些都是在ISO 2022编解码器下访问的 >>> '亜'.encode('iso2022_jp') b'\x1b$B0!\x1b(B' 如果我看到这些字节没有被转义序列框起来,我就必须知道使用的
我使用的是Python2.7.12,但我也对Python3解决方案持开放态度这些都是在ISO 2022编解码器下访问的
>>> '亜'.encode('iso2022_jp')
b'\x1b$B0!\x1b(B'
如果我看到这些字节没有被转义序列框起来,我就必须知道使用的是哪个版本的JIS X 0208,但我现在在维基百科上完全是模式匹配
>>> b = b'\033$B' + bytes.fromhex('3021')
>>> c = b.decode('iso2022_jp')
>>> c
'亜'
>>> urllib.parse.quote(c)
'%E4%BA%9C'
这是Python3。此解决方案可能不是标准的,但似乎可以工作 密码 参考 标准编码: JIS表格:
谢谢你的解决方案。我想知道你是否也能提供Python 2解决方案。我也不太明白你是如何得到序列b'\033$b的。这个序列是这个例子特有的,还是你能把它用于其他JIS X 208代码中呢?这就是Python在我要求在iso2022_jp中编码时给出的结果,更多内容在
import urllib.parse
def jis_to_euc_jp(jis_hex: str):
"""
You can find the rules from this website: https://pentan.info/doc/jis_list.html
8080 = A1A1 - 2121
4B8080 = 8FA1C1 - 442141
"""
int_jis = int(jis_hex, 16)
step = int('8080', 16) if int_jis <= int('7426', 16) else int('4B8080', 16)
return hex(int_jis + step).upper()[2:] # 0X3021 -> 3021
def eucjp_to_utf_16be(eucjp_hex: str):
byte_ch = bytes.fromhex(eucjp_hex)
real_char = byte_ch.decode('euc_jp') # '亜'
# code = real_str.encode('utf-8').hex().upper() # E4BA9C
return real_char
def main():
for v in ['亜'.encode('utf-8').hex().upper(), # when glyph is know. E4BA9C
# only know jis code, to find the real char
jis_to_euc_jp('3021'), # B0A1 # the Standard Encodings is provided euc-jp turn to utf-16be, so we need to know the relation between JIS and euc-jp
eucjp_to_utf_16be(jis_to_euc_jp('3021'))
]:
print(urllib.parse.quote(v))
if __name__ == '__main__':
main()
E4BA9C
B0A1
%E4%BA%9C