日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

micropython oled中文_micropython中怎么将gb2312编码的字节流变成中文

發(fā)布時間:2023/12/10 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 micropython oled中文_micropython中怎么将gb2312编码的字节流变成中文 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

展開全部

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

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

# '啊' 是漢字區(qū)第1個漢字,62616964757a686964616fe59b9ee7ad9431333431353932對應(yīng)數(shù)據(jù)為 ?不對?

# 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轉(zhuǎn)換為一個整數(shù)

long(x [,base ]) 將x轉(zhuǎn)換為一個長整數(shù)

float(x ) 將x轉(zhuǎn)換到一個浮點數(shù)

complex(real [,imag ]) 創(chuàng)建一個復(fù)數(shù)

str(x ) 將對象 x 轉(zhuǎn)換為字符串

repr(x ) 將對象 x 轉(zhuǎn)換為表達(dá)式字符串

eval(str ) 用來計算在字符串中的有效Python表達(dá)式,并返回一個對象

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

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

chr(x ) 將一個整數(shù)轉(zhuǎn)換為一個字符

unichr(x ) 將一個整數(shù)轉(zhuǎn)換為Unicode字符

ord(x ) 將一個字符轉(zhuǎn)換為它的整數(shù)值

hex(x ) 將一個整數(shù)轉(zhuǎn)換為一個十六進(jìn)制字符串

oct(x ) 將一個整數(shù)轉(zhuǎn)換為一個八進(jìn)制字符串

bytearray(x) 列表轉(zhuǎn)為數(shù)組

'''

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 轉(zhuǎn)成 區(qū)位號

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

f.seek( c )

hz = bytearray( f.read(24) )

f.close()

# 創(chuàng)建 hzk12:16x12 or hzk16:16x16 大小幀緩存區(qū)儲存圖片幀,水平掃描

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 轉(zhuǎn)成 區(qū)位號

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

f.seek(c)

hz = bytearray(f.read(24))

f.close()

# 創(chuàng)建 hzk12:16x12 or hzk16:16x16 大小幀緩存區(qū)儲存圖片幀,水平掃描

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沒法實現(xiàn)unicode 轉(zhuǎn) gb2312, 要借助cpython 轉(zhuǎn)化成 gb2312

#現(xiàn)在可用 文件查表法 uni2gb (unicode-0x4e00)轉(zhuǎn)gb2312碼

hzs = ( 206,210, 185,253, 193,249, 210,187, 189,218 ) #每兩字節(jié)表示一個漢字

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

總結(jié)

以上是生活随笔為你收集整理的micropython oled中文_micropython中怎么将gb2312编码的字节流变成中文的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。