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

時間 2021-08-11 17:34:55

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()

excel中怎麼將13 1 1,13 2 1,13 3 1,13 10 1,13 11 1,13 12 1進行排序呢

正常是可以的。你的排序不成功,說明你這些所謂的數值,不是數值,而是文字。選中這一列,選單,資料,分列,直接點完成。強行轉化為純數值,才可以排序。假設資料在a列,分別設公式在b e列,b列提取出前面的一組資料 13 公式為left a1,2 c列提取出中間的資料,公式為mid a1,4,find a1...

ps中怎麼將透明底層換成白色的,PS中怎麼將透明底層換成白色的?

且看時光 通用方法 1 按 ctrl n 新建圖層,3 按 ctrl delete 填充圖層為白色 也可用油漆桶 4 按 shift ctrl 移動新建的圖層為最底層 即可。注意 在最底圖層,點眼睛可在透明和白色間切換。 樓主 新建的圖層當然是透明的 你只要選中這個新建的圖層 填充白色就可以了 快捷...

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

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