簡體   English   中英

Python-逐字節讀取UTF-8編碼的字符串

[英]Python - Reading a UTF-8 encoded string byte-by-byte

我有一台返回UTF-8編碼字符串的設備。 我只能逐字節讀取它,並且讀取以值0x00的字節終止。

我正在為其他人創建Python 2.7函數以訪問我的設備並返回字符串。

在以前的設計中,當設備剛剛返回ASCII時,我在循環中使用了它:

x = read_next_byte()
if x == 0:
    break
my_string += chr(x)

其中,x是從設備讀取的最新字節值。

現在,設備可以返回UTF-8編碼的字符串,但是我不確定如何將返回的字節轉換為UTF-8編碼的字符串/ unicode。

當x> 127時, chr(x)會引起錯誤,因此我認為使用unichr(x)可能有效,但是假定傳遞的值是完整的unicode字符值,但是我只有0-255的一部分。

那么,如何將從設備返回的字節轉換為可以在Python中使用並且仍能處理完整UTF-8字符串的字符串?

同樣,如果在Python中給了我一個UTF-8字符串,我該如何將其分解為單個字節以發送到我的設備並仍然維護UTF-8?

正確的解決方案是讀取直到您擊中終止字節,然后在那時轉換為UTF-8(這樣您就擁有了所有字符):

mybytes = bytearray()
while True:
    x = read_next_byte()
    if x == 0:
        break
    mybytes.append(x)
my_string = mybytes.decode('utf-8')

以上是您原始代碼的最直接翻譯。 有趣的是,在以下兩種情況之一中,可以通過將C樣式的有狀態字節讀取器函數轉換為Python迭代器以使您單行工作,而使用兩個arg iter器來極大地簡化代碼:

# If this were Python 3 code, you'd use the bytes constructor instead of bytearray
my_string = bytearray(iter(read_next_byte, 0)).decode('utf-8')

暫無
暫無

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

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