在android中使用skia时中文乱码

先下载NotoSansHans-Regular.otf字体

地址https://download.csdn.net/download/weixin_42001089/10498337

然后将其从pc上传到android机上,具体的就是打开cmd运行下面

adb push D:\NotoSansHans-Regular.otf /sdcard/

其中D:\NotoSansHans-Regular.otf是电脑上中文字体的所在路径

/sdcard是要放到android系统的路径

可以用adb shell查看上传结果。

然后最关键的两步就是下面:

const char *pat = "/sdcard/NotoSansHans-Regular.otf";
paint.setTypeface(SkTypeface::MakeFromFile(pat));

其中setTypeface的作用就是设置字形,具体可以查看其官网https://skia.org/user/api/SkPaint_Reference

这个时候应该就可以支持中文了



经过检验,该方法日文和中文都支持,但韩文不可以,所以还是用DroidSansFallback.ttf字体吧,以上下载链接中也有,具体操作方法一样

如果还是不行的话可以试着下面的宽字节转化为char

const wchar_t *wstr = L"我心永恒 My Heart Will Go On ";
int requiredsize;
char* old_locale = strdup(setlocale(LC_CTYPE, NULL));
setlocale(LC_CTYPE, setlocale(LC_ALL, ""));
requiredsize = wcstombs(NULL, wstr, 0);
char *text;
text = (char *)malloc(requiredsize + 1);
wcstombs((char *)text, (const wchar_t *)wstr, requiredsize + 1);

其中text就是转化后的char型,直接拿去用就可以了

不过最后别忘了

setlocale(LC_CTYPE, old_locale);
free(old_locale);
delete[]text;

猜你喜欢

转载自blog.csdn.net/weixin_42001089/article/details/80803788