将 utf-8 字符转换为 scandic 字母
Converting utf-8 characters to scandic letters
我正在努力尝试对 scandic 字母采用 utf-8 格式的字符串进行编码。
例如,我想转换以下
细绳:
test_string = "\xc3\xa4\xc3\xa4abc"
转化为:
test_string = "ääabc"
最终目标是通过 API 将此字符串发送到 Slack-channel。我做了一些测试,发现 Slack 可以正确处理 scandic 字母。
我尝试了以下命令:
test_string= test_string.encode('latin1').decode('utf-8')
但这根本不会改变字符串。
同样适用于更暴力的方法:
def simple_scand_convert(string):
string = string.replace("\xc3\xa4", "ä")
同样,这根本不会改变字符串。我可以从哪里寻找解决方案的任何提示或材料?
根据原问题和评论中的讨论,我怀疑您只是没有保存转换结果。 Python 字符串是不可变的,因此仅更改传递给函数的字符串不会对原始字符串做任何事情:
In [42]: def change_string(s):
...: s = "hello world"
...:
...: test_s = "still here"
...: change_string(test_s)
...: print(test_s)
still here
相反,您需要 return 函数中的转换结果并重新分配变量:
In [43]: def change_string(s):
...: s = s.encode('latin1').decode('u8')
...: return s
...:
...: test_s = "\xc3\xa4\xc3\xa4abc"
...: test_s = change_string(test_s)
...: print(test_s)
ääabc
我无法重现您的从传入的 webhook 读取汤消息 代码片段;因此,我的答案基于硬编码数据,并详细说明了 Python specific text encodings raw_unicode_escape
and unicode_escape
的工作原理:
test_string = "\xc3\xa5\xc3\xa4___\xc3\xa5\xc3\xa4" # hard-coded
print('test_string ', test_string)
print('.encode("raw_unicode_escape")',
test_string.encode( 'raw_unicode_escape'))
print('.decode( "unicode_escape")',
test_string.encode( 'raw_unicode_escape').decode( 'unicode_escape'))
print('.encode("latin1").decode() ',
test_string.encode( 'raw_unicode_escape').decode( 'unicode_escape').
encode( 'latin1').decode( 'utf-8'))
输出:\SO069394.py
test_string \xc3\xa5\xc3\xa4___åä
.encode("raw_unicode_escape") b'\xc3\xa5\xc3\xa4___\xc3\xa5\xc3\xa4'
.decode( "unicode_escape") åä___åä
.encode("latin1").decode() åä___åä
我正在努力尝试对 scandic 字母采用 utf-8 格式的字符串进行编码。
例如,我想转换以下
细绳:
test_string = "\xc3\xa4\xc3\xa4abc"
转化为:
test_string = "ääabc"
最终目标是通过 API 将此字符串发送到 Slack-channel。我做了一些测试,发现 Slack 可以正确处理 scandic 字母。
我尝试了以下命令:
test_string= test_string.encode('latin1').decode('utf-8')
但这根本不会改变字符串。
同样适用于更暴力的方法:
def simple_scand_convert(string):
string = string.replace("\xc3\xa4", "ä")
同样,这根本不会改变字符串。我可以从哪里寻找解决方案的任何提示或材料?
根据原问题和评论中的讨论,我怀疑您只是没有保存转换结果。 Python 字符串是不可变的,因此仅更改传递给函数的字符串不会对原始字符串做任何事情:
In [42]: def change_string(s):
...: s = "hello world"
...:
...: test_s = "still here"
...: change_string(test_s)
...: print(test_s)
still here
相反,您需要 return 函数中的转换结果并重新分配变量:
In [43]: def change_string(s):
...: s = s.encode('latin1').decode('u8')
...: return s
...:
...: test_s = "\xc3\xa4\xc3\xa4abc"
...: test_s = change_string(test_s)
...: print(test_s)
ääabc
我无法重现您的从传入的 webhook 读取汤消息 代码片段;因此,我的答案基于硬编码数据,并详细说明了 Python specific text encodings raw_unicode_escape
and unicode_escape
的工作原理:
test_string = "\xc3\xa5\xc3\xa4___\xc3\xa5\xc3\xa4" # hard-coded
print('test_string ', test_string)
print('.encode("raw_unicode_escape")',
test_string.encode( 'raw_unicode_escape'))
print('.decode( "unicode_escape")',
test_string.encode( 'raw_unicode_escape').decode( 'unicode_escape'))
print('.encode("latin1").decode() ',
test_string.encode( 'raw_unicode_escape').decode( 'unicode_escape').
encode( 'latin1').decode( 'utf-8'))
输出:\SO069394.py
test_string \xc3\xa5\xc3\xa4___åä .encode("raw_unicode_escape") b'\xc3\xa5\xc3\xa4___\xc3\xa5\xc3\xa4' .decode( "unicode_escape") åä___åä .encode("latin1").decode() åä___åä