簡體   English   中英

如何在python中正確打印unicode字符列表?

[英]How to properly print a list of unicode characters in python?

我正在嘗試在 python 字符串中搜索表情符號。 所以我有,例如,

em_test = ['\U0001f680']
print(em_test)
['🚀']
test = 'This is a test string 💰💰🚀'
if any(x in test for x in em_test):
    print ("yes, the emoticon is there")
else: 
    print ("no, the emoticon is not there")

yes, the emoticon is there

如果在 em_test 中搜索

'這是一個測試字符串💰💰🚀'

我真的可以找到它。

所以我制作了一個 csv 文件,其中包含我想要由他們的 unicode 定義的所有表情符號。 CSV 如下所示:

\\U0001F600

\\U0001F601

\\U0001F602

\\U0001F923

當我導入並打印它時,我不會得到表情符號,而只是文本表示:

['\\U0001F600',
 '\\U0001F601',
 '\\U0001F602',
 '\\U0001F923',
...
]

因此我不能用它來在另一個字符串中搜索這些表情符號......我不知何故知道雙反斜杠 \\ 只是一個單斜杠的表示,但不知何故unicode閱讀器沒有得到它......我不知道我是什么我不見了

有什么建議么?

您可以使用.decode('unicode-escape')解碼這些 Unicode 轉義序列。 但是, .decode是一種bytes方法,因此如果這些序列是文本而不是字節,您首先需要將它們編碼為字節。 或者,您可以(可能)以二進制模式打開 CSV 文件,以便將這些序列作為bytes而不是文本字符串讀取。

只是為了好玩,我還將使用unicodedata來獲取這些表情符號的名稱。

import unicodedata as ud

emojis = [
    '\\U0001F600',
    '\\U0001F601',
    '\\U0001F602',
    '\\U0001F923',
]

for u in emojis:
    s = u.encode('ASCII').decode('unicode-escape')
    print(u, ud.name(s), s)

輸出

\U0001F600 GRINNING FACE 😀
\U0001F601 GRINNING FACE WITH SMILING EYES 😁
\U0001F602 FACE WITH TEARS OF JOY 😂
\U0001F923 ROLLING ON THE FLOOR LAUGHING 🤣

這應該比使用ast.literal_eval 如果您以二進制模式讀取數據,它會更快,因為它避免了讀取文件時的初始解碼步驟,並允許您消除.encode('ASCII')調用。

您可以使用

u.encode('Latin1').decode('unicode-escape')

但這對於您的表情符號數據來說不是必需的。 正如我之前所說,如果您以二進制模式打開文件以避免需要對其進行編碼,那就更好了。

1. 保持你的 csv 原樣:

這是一個臃腫的解決方案,但使用ast.literal_eval有效:

import ast

s = '\\U0001F600'

x = ast.literal_eval('"{}"'.format(s))
print(hex(ord(x)))
print(x)

我得到0x1f600 (這是正確的字符代碼)和一些表情符號(😀)。 (好吧,我不得不將一個奇怪的字符從我的控制台復制/粘貼到這個答案文本字段,但這是我最后的控制台問題,否則有效)

只需用引號括起來就可以讓ast將輸入作為字符串。

2.直接使用字符代碼

也許通過存儲字符代碼本身而不是\\U格式會更好:

print(chr(0x1F600))

完全一樣(所以ast有點矯枉過正)

您的 csv 可能包含:

0x1F600
0x1F601
0x1F602
0x1F923

然后chr(int(row[0],16))會在閱讀時起作用:例如,如果 CSV 中有 1 行(或第一行)

with open("codes.csv") as f:
   cr = csv.reader(f)
   codes = [int(row[0],16) for row in cr]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM