89C51RX 发表于 2020-3-19 20:59

LCD显示中文编码问题

LCD显示中文 使用GBK编码,文件整体也是GBK MDK编译一切正常
使用 VSCODE编辑是 使用UTF8编码 MDK也调整UTF8 编译报错 不能运行
有点搞不明白 编译是代码格式,还是文件格式 为什么报错
UTF8 可否实现GBK编码 或是有什么其他方式完成

叶春勇 发表于 2020-3-19 22:16

本帖最后由 叶春勇 于 2020-3-19 22:21 编辑

这个lcd的要显示中文,需要发指令过去,这个指令是2字节的gb2312格式
utf8格式表示中文,是变长的。编码格式与gb2312不一样的。可能被c编译器认为是特殊字符,导致词法分析失败

William1994 发表于 2020-3-19 23:04

首先设置VSCODE自动猜编码。如果猜的不对,右下角选择GB2312。
keil的编辑器自从MDK5切换成scintilla的后,选项里有UTF8的选项,但是编译器支持的有问题。而且UTF8还有不带BOM的,keil编译器会识别为ANSI。
字库必须用GB的,不能用UTF的,UTF8-Unicode的转换的函数不复杂,但是真的没有必要。
百度搜一个函数:看着基本是对的。
/************************************************************************
*Function: Utf8ToUnicode
************************************************************************/
static void Utf8ToUnicode(char* unicode, char *utf8)
{
    char *pchar = utf8;
    int nBytes = 0;
   
    if (0 == (*utf8 & 0x80))
    {
      /*
         * single-byte char
         */
      nBytes = 1;
      unicode = *utf8;
    }
    else
    {
      /*
         * 3-byte char (chinese char)
         */
      int i;

      if ( (*utf8 & 0xf0) == 0xe0 )
      {
            nBytes= 3;
            unicode = ((utf8 & 0x0f) <<4) + ((utf8 & 0x3c) >>2);
            unicode = ((utf8 & 0x03) <<6) + (utf8 & 0x3f);
      }
      else
      {
            debug("ERROR: utf-8 to unicode, nBytes !=3\n");
            nBytes = 0;
            unicode = '?';
            return;
      }
    }

    return;
}
页: [1]
查看完整版本: LCD显示中文编码问题