micropython中怎麼將gb2312編碼的位元組流變成中文

時間 2021-08-11 17:35:05

1樓:匿名使用者

micropython中好像還沒有unicode方面的支援,中文解碼也還沒有。

不過可以參考這樣的想法,gb2312編碼的漢字都是雙位元組,asc碼都是大於127的.這樣如果連續兩個字元都是大於127的,就可以當成一個漢字處理。

2樓:匿名使用者

# -*- code: utf-8 -*-

# 在 micropython 中執行, 注意在執行目錄下有 hzk12/16

# '啊' 是漢字區第1個漢字,對應資料為 ?不對?

# 0x00, 0x00, 0x0e, 0xfc, 0xea, 0x08, 0xaa, 0x08,

# 0xaa, 0xe8, 0xaa, 0xa8, 0xac, 0xa8, 0xaa, 0xa8,

# 0xaa, 0xa8, 0xaa, 0xa8, 0xea, 0xe8, 0xaa, 0xa8,

# 0x0c, 0x08, 0x08, 0x08, 0x08, 0x28, 0x08, 0x10

# hzk16 試驗: '一','我'正確, '啊' 不對?

# hzk12 字型檔的位長度是16*12

# seek位置 '一': 111168, '五': 103152, '我':102196

'''int(x [,base ])         將x轉換為一個整數

long(x [,base ])        將x轉換為一個長整數

float(x )               將x轉換到一個浮點數

complex(real [,imag ])  建立一個複數

str(x )                 將物件 x 轉換為字串

repr(x )                將物件 x 轉換為表示式字串

eval(str )              用來計算在字串中的有效python表示式,並返回一個物件

tuple(s )               將序列 s 轉換為一個元組

list(s )                將序列 s 轉換為一個列表

chr(x )                 將一個整數轉換為一個字元

unichr(x )              將一個整數轉換為unicode字元

ord(x )                 將一個字元轉換為它的整數值

hex(x )                 將一個整數轉換為一個十六進位制字串

oct(x )                 將一個整數轉換為一個八進位制字串

bytearray(x)            列表轉為陣列

'''from machine import pin, i2c

import framebuf

import ssd1306

i2c = i2c(sda=pin(5), scl=pin(4))

o = ssd1306.ssd1306_i2c(128,64,i2c)

def drawhz( hzs, xp, yp ):

for x in range( len(hzs)//2 ):

c = ((hzs[x*2] - 0xa1)* 94 + (hzs[x*2+1] - 0xa1)) * 24  #gb2312 轉成 區位號

f = open( 'uc_hzk12', 'rb' )

f.seek( c )

hz = bytearray( f.read(24) )

f.close()

# 建立 hzk12:16x12 or hzk16:16x16 大小幀快取區儲存**幀,水平掃描

fb1 = framebuf.framebuffer(hz, 16, 12, framebuf.mono_hlsb)

o.blit( fb1, xp + x*12, yp )  # 將fb1幀快取送至oled顯示,起始位(38,16)

xp += 1

#在 repl 中, 貼上的中檔案變碼了, 裝載檔案形式才正常

def drawhz2(hzs, xp, yp):

for x in range(len(hzs)):

f = open('uni2gb', 'rb')

f.seek( (ord(hzs[x])-0x4e00)*2 )

gb23 = bytearray(f.read(2))

f.close()

c = ((gb23[0] - 0xa1) * 94 + (gb23[1] - 0xa1)) * \

24  # gb2312 轉成 區位號

f = open('uc_hzk12', 'rb')

f.seek(c)

hz = bytearray(f.read(24))

f.close()

# 建立 hzk12:16x12 or hzk16:16x16 大小幀快取區儲存**幀,水平掃描

fb1 = framebuf.framebuffer(hz, 16, 12, framebuf.mono_hlsb)

o.blit(fb1, xp + x*12, yp)  # 將fb1幀快取送至oled顯示,起始位(38,16)

xp += 1

o.fill(0)

# upy沒法實現unicode 轉 gb2312, 要藉助cpython 轉化成 gb2312

#現在可用 檔案查表法 uni2gb  (unicode-0x4e00)轉gb2312碼

hzs = ( 206,210, 185,253, 193,249, 210,187, 189,218 ) #每兩位元組表示一個漢字

drawhz2( '\u98de\u96ea\u8fde\u5929', 0, 0 )

drawhz2( '\u98de\u96ea\u8fde\u5929\u5c04\u767d\u9e7f', 0, 13 )  #飛雪連天

drawhz( hzs, 0, 26 )

drawhz( hzs, 16, 39)

drawhz( hzs, 16, 52 )

o.show()

在中怎麼將打到中,在WORD中怎麼將「 」打到「 」中

況玉枝將培 選 格式 選單 中文版式 中的 帶圈符號 文字 選 圈號 選 確定 寶淑蘭竭碧 方法1 先在word文件中通過 插入 特殊符號 數字符號插入 然後選中 格式 中文版式 帶圈字元 就會顯示在左邊的文字中,右邊的圈號選擇 即可 如圖 方法2 檢視 工具欄 控制元件工具箱中直接選擇就行 苑秀雲...

CAD中怎麼將圓拉伸成橢圓,CAD中怎麼把圓形的圖變成橢圓型,長方形的圖變成正方形啊

cad的圓無法直接改變為橢圓。它們是不同的物件,構成它們的數學公式完全不同。只能另外繪畫橢圓。cad不是普通的藝術類繪圖軟體,他的每一個圖元物件都必須由一個特定的精確的數學公式精確描繪。cad中怎麼把圓形的圖變成橢圓型,長方形的圖變成正方形啊 相當於對一個圖形的x和y方向指定不同比例進行縮放,這樣的...

ps中怎麼刪除多餘的,PS中怎麼將多選出的部分去掉

和我們正常的刪除方式是一樣的,只不管你要先選擇選中工具,然後用選中工具選中你要刪除的內容,點選鍵盤的del鍵就可以了。ps修圖小技巧 玩轉創意 工具材料 adobe photoshop cs6 ps怎麼去掉多餘的東西 方法一。第二步 選擇 仿製圖章工具 第四步 直接在要去掉部分塗抹即可。這樣就完成了...