LCD显示中文编码问题
LCD显示中文 使用GBK编码,文件整体也是GBK MDK编译一切正常使用 VSCODE编辑是 使用UTF8编码 MDK也调整UTF8 编译报错 不能运行
有点搞不明白 编译是代码格式,还是文件格式 为什么报错
UTF8 可否实现GBK编码 或是有什么其他方式完成
本帖最后由 叶春勇 于 2020-3-19 22:21 编辑
这个lcd的要显示中文,需要发指令过去,这个指令是2字节的gb2312格式
utf8格式表示中文,是变长的。编码格式与gb2312不一样的。可能被c编译器认为是特殊字符,导致词法分析失败 首先设置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]