python3: 如何将“\u3000”(表意space)转换为“∀”?

python3: how to convert "\u3000" (ideographic space) to " "?

japanese.txt

あかさ
あいうえ お
いい

mycode.py

with open('japanese.txt', 'r', encoding='utf-8') as f:
    old = [line.strip() for line in f.readlines()]

send_mail(from, to, title, message=f"hello {old}!")

然后我收到这样的邮件

hello ['あかさ', 'あいうえ\u3000お', 'いい']!

我要邮寄的是这个

hello ['あかさ', 'あいうえ お', 'いい']!

我怎样才能做到这一点?

list 的 __str__ 方法在元素上使用 repr,因此您会在邮件中看到 \u3000。只需自己将列表转换为字符串即可:

In [28]: l = ['あかさ', 'あいうえ\u3000お', 'いい']

In [29]: print(', '.join(map(str, l)))
あかさ, あいうえ お, いい

如果您确定所有列表元素都是字符串,则可以省略 map(str, ...) 并只使用 ', '.join(l)

如果您想用标准 space 替换 \u3000 字符并对其他不太常见的 unicode 字符执行相同类型的操作,您可以使用 unicodedata 模块:

import unicodedata

jText = """あかさ
あいうえ お
いい"""

jList = [line.strip() for line in jText.split("\n")] 
    # ['あかさ', 'あいうえ\u3000お', 'いい']

normalizedList = [unicodedata.normalize('NFKC', line) for line in jList]
    # ['あかさ', 'あいうえ お', 'いい']