簡體   English   中英

表情符號,當文本文件包含utf-8和utf-16時進行編碼/解碼

[英]Emoji, encode/decode when text file contain utf-8 and utf-16

我有一個包含以下內容的文本文件:

....     
{"emojiCharts":{"emoji_icon":"\u2697","repost": 3, "doc": 3, "engagement": 1184, "reach": 6734, "impression": 44898}}
{"emojiCharts":{"emoji_icon":"\U0001f924","repost": 11, "doc": 11, "engagement": 83, "reach": 1047, "impression": 6981}}
....

一些表情符號,都在\\uhhhh格式,其中一些\\Uhhhhhhhh格式。

是否存在任何將其編碼/解碼以顯示表情符號的方法? 因為如果文件僅包含\\Uhhhhhhhh則一切正常。

進入這一階段,我已經以這種方式修改了文件:

insightData.decode("raw_unicode_escape").encode('utf-16', 'surrogatepass').decode('utf-16').encode("raw_unicode_escape").decode("latin_1")

要顯示表情符號,我需要使用以下命令:

insightData.decode("raw_unicode_escape").encode('utf-16', 'surrogatepass').decode('utf-16')

但是它顯示一個錯誤:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2600' in position 30: ordinal not in range(128)

解:

with open(OUTPUT, "r") as infileInsight:
    insightData = infileInsight.read()\
    .decode('raw_unicode_escape')

with open(OUTPUT, "w+") as outfileInsight:
    outfileInsight.write(insightData.encode('utf-8'))

您可以做到這一點。

print a["emojiCharts"]["emoji_icon"].decode("unicode-escape")

輸出:

這與UTF-8或UTF-16沒有關系。 通常,這只是Python的轉義Unicode字符的方式,U + FFFF以下的所有內容都使用\￿而上方的所有內容都使用\\UFFFFFFFF (出於歷史原因)。

兩個轉義序列在Python字符串中應完全相同。 在我的機器上,使用@vks的解決方案:

$ python
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> '\U0000ABCD'.decode('unicode-escape')
u'\uabcd'
>>> '\uABCD'.decode('unicode-escape')
u'\uabcd'

和類似的Python 3。

好。 Python 2.7,Win 10。

您的原始文件是純ASCII,包含確切的Unicode轉義符(“ \\ u ####”,6個字節,“ \\ U ########”,10個字節)。

讀取文件並使用'unicode-escape'解碼:然后您有了一個Python unicode字符串; 我們稱之為your_unicode_string

要寫入文件,請選擇以下任一項:

output_encoding = 'utf-8'

要么

output_encoding = 'utf-16-le'

接着:

import codecs
with codecs.open(output_filename, 'w', encoding=output_encoding) as fpo:
    # fpo.write(u'\ufeff') # for windows, you might want to write this at the start
    fpo.write(your_unicode_string)

對於給定的python和os版本,如果沒有任何篡改,您將無法僅print到控制台並查看表情符號。

暫無
暫無

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

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