打印

LCD显示中文编码问题

[复制链接]
996|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
89C51RX|  楼主 | 2020-3-19 20:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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[0] = *utf8;
    }
    else
    {
        /*
         * 3-byte char (chinese char)
         */
        int i;

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

    return;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

151

帖子

0

粉丝