解决U8G2中文显示问题:修复u8g2.drawStr()中文不显示的方法

        在使用u8g2进行中文先显示时,踩到一个坑,其他大佬也没有专门提过这一点,现跟大家分享一下。

        起因是在看一些例程时,直接采用u8g2.drawStr()来进行英文输出,在想用该方法进行中文输出时,无法显示中文。

运行代码如下:

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE);   // SDA:21 scl:22 
void setup(void) {  
  u8g2.begin();
  u8g2.enableUTF8Print();
}

void loop(void) 
{  
  u8g2.clearBuffer(); 
  u8g2.setFont(u8g2_font_wqy15_t_gb2312);     
  u8g2.drawStr(10,20,"你好");
  u8g2.drawStr(10,40,"Hello");        
  u8g2.sendBuffer();
  delay(1000);
}

显示效果为:

只显示"Hello",不显示"你好​​"。

        原因是u8g2.drawStr()只能进行英文显示,要想输出中文应使用u8g2.print()和u8g2.drawUTF8()

使用u8g2.print()方法输出:

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE);   // SDA:21 scl:22 
void setup(void) {  
  u8g2.begin();
  u8g2.enableUTF8Print();
}

void loop(void) 
{  
  u8g2.clearBuffer(); 
  u8g2.setFont(u8g2_font_wqy15_t_gb2312);     
  //u8g2.drawStr(10,20,"你好");
  u8g2.setCursor(10,20);
  u8g2.print("你好");
  u8g2.drawStr(10,40,"Hello");        
  u8g2.sendBuffer();
  delay(1000);
}

 使用u8g2.drawUTF8()输出

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE);   // SDA:21 scl:22 
void setup(void) {  
  u8g2.begin();
  u8g2.enableUTF8Print();
}

void loop(void) 
{  
  u8g2.clearBuffer(); 
  u8g2.setFont(u8g2_font_wqy15_t_gb2312);     
  //u8g2.drawStr(10,20,"你好");
  //u8g2.setCursor(10,20);
  //u8g2.print("你好");
  u8g2.drawUTF8(10,20,"你好啊");
  u8g2.drawStr(10,40,"Hello");        
  u8g2.sendBuffer();
  delay(1000);
}

官方文档中,也明确指出了这一点。

 

 

物联沃分享整理
物联沃-IOTWORD物联网 » 解决U8G2中文显示问题:修复u8g2.drawStr()中文不显示的方法

发表评论