micropython oled中文_micropython中怎么将gb2312编码的字节流变成中文
展開全部
# -*- code: utf-8 -*-
# 在 micropython 中運行, 注意在運行目錄下有 hzk12/16
# '啊' 是漢字區第1個漢字,62616964757a686964616fe59b9ee7ad9431333431353932對應數據為 ?不對?
# 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()
總結
以上是生活随笔為你收集整理的micropython oled中文_micropython中怎么将gb2312编码的字节流变成中文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gcc编译系统
- 下一篇: java-jsoup爬虫