1. kivy中显示中文乱码和提示错误的原因:

  • 编码问题
  • 字体问题

2. 字体问题的解决

可以下载支持中文的字体文件ttf,我这里使用了微软雅黑中文简体msyh.ttf。我们在编写布局时可以直接在相关控件上指定字体类型

# 在py文件中的使用方式:
btn = Button(text='我的世界', font_name='msyh.ttf')

在kv文件中的使用方式:

Button:
text: '我的世界'
font_name: 'msyh.ttf'

但是这种方式很显然是不可取的,因为有一个控件,就得为其指定字体类型名称。我们想在程序运行时就加载注册好字体类型,这就需要用到kivyLabelBase来提前注册好字体类型

from kivy.core.text import LabelBase
LabelBase.register(name='Font_Hanzi',fn_regular='./fonts/msyh.ttf')

注册后如何使用呢?

# py文件中:
btn = Button(text='我的世界', font_name='Font_Hanzi')
# kv文件中:
Button:
text: '我的世界'
font_name: 'Font_Hanzi'

看起来是不是并没有减少代码量,其实不然,这样为程序提供了一个统一的变量供所有控件使用,方便很多了。

3. 解码报错问题

解码报错问题主要出现在py文件去读取kv文件的过程中,提示的错误类似UnicodeDecodeError: 'gbk' codec can't decode byte 0xba in position 171: illegal multibyte sequence,报这个错误的原因很简单,就是主程序读取kv文件时的编码问题。

class ClockApp(App):
def build(self):
return Builder.load_file('./kvs/clock.kv')

Builder.load_file('./kvs/clock.kv')这个方法是有问题的,那么如果解决问题呢?

我们可以直接查看源码

def load_file(self, filename, **kwargs):
filename = resource_find(filename) or filename
if __debug__:
trace('Lang: load file %s' % filename)
# 问题就出在open()方法上,它没有指明具体的编码格式
with open(filename, 'r') as fd:
kwargs['filename'] = filename
data = fd.read()
...

问题找到了,解决问题的方法就是直接改源代码,在open()方法中加入encoding='utf-8'关键字参数即可。

def load_file(self, filename, **kwargs):
filename = resource_find(filename) or filename
if __debug__:
trace('Lang: load file %s' % filename)
# 在open()方法中指明编码方式为utf-8
with open(filename, 'r', encoding='utf-8') as fd:
kwargs['filename'] = filename
data = fd.read()
...

4. 效果

Kivy中显示汉字的问题的更多相关文章

  1. 逆向project第004篇:令计算器程序显示汉字(下)

    一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...

  2. VB6单片机编程中的汉字处理

    在DOS时代,拥有一个华丽的汉字菜单几乎是每个高档中文应用程序必须的包装.中文Windows操作系统的出现使得高级开发平台实现全中文的提示和界面非常容易和方便.在一般的应用程序中已经很少需要去专门考虑 ...

  3. 将汉字取模软件中的汉字放到keil5中显示

    最近因为要使用STM32做毕业设计,需要用LCD显示中文,STM32开发板用的是原子的战舰STM32开发板,给的LCD显示例程里貌似没有中文显示,那么需要自己去编写中文显示程序. 软件编写对我来说并不 ...

  4. Protel中放置汉字工具的使用图示

    首先先到网上下载Protel中放置汉字工具ProtelHz.然后把ProtelHz中的文件全部解压到Protel99se安装目录X:\Program Files\Design Explorer 99 ...

  5. OpenGL------在Windows系统中显示文字

    增加了两个文件,showline.c, showtext.c.分别为第二个和第三个示例程序的main函数相关部分.在ctbuf.h和textarea.h最开头部分增加了一句#include <s ...

  6. 2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)

    在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Unicode编码 2)写应用程序,使LCD显示汉字和字符 大家都知道,数据传输的是二进制,而字符和汉字 ...

  7. 使用Tslib在触摸屏上显示汉字【转】

    转自:http://www.latelee.org/embedded-linux/use-tslib-to-display-chinese-character.html 终于到了在触摸屏上显示汉字了, ...

  8. activiti部署到linux后流程图不显示汉字的问题

    linux和windows的字体文件一般是不一样的,默认情况下,linux的java7中一般不支持中文,activiti的动态流程图中的汉字需要java调用汉字的字库,这里需要配置一下java的汉字字 ...

  9. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

随机推荐

  1. bfs—Dungeon Master—poj2251

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32228   Accepted: 12378 ...

  2. System Call

    内容 设计系统调用,将系统的相关信息(CPU型号.操作系统的版本号.系统中的进程等类似于Windows的任务管理器的信息)以文本形式列表显示于屏幕,并编写用户程序予以验证. 思想 系统调用是应用程序和 ...

  3. HTTP请求头中的X-Forwarded-For介绍

    概述 我们在做nginx方向代理的时候,为了记录整个代理过程,我们往往会在配置文件中加上如下配置: location ^~ /app/download/ { ... proxy_set_header ...

  4. kafka简介及集群部署

    消息队列概念:(Message queue): “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. “消息队列”是在消息的传输过程中保存消 ...

  5. oracle常用数学函数

    数学函数 ABS:(返回绝对值) --返回绝对值 select abs(-1.11) from dual; CEIL:(向上取整) --向上取整 select ceil(3.1415) from du ...

  6. 远程登陆与数据CP

    1 SSH登陆原理   SSH,Secure Shell,是一套协议标准,可以用来实现两台机器之间的安全登陆以及安全的数据传送,其保证数据安全的原理是非对称加密.   传统的对称加密方式使用的是一套密 ...

  7. 李婷华 201771010113 《面向对象程序设计(java)》第一周学习总结

    第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com 薄荷蓝莓 程序设计评测:https://pintia.cn/ 1957877441@q ...

  8. C# 中 枚举Enum 一些转换的方法整理

    工作中 经常遇到枚举 的一些转换  特别是获取枚举备注等  特地整理下 方法以后使用 public void TestMethod1() { TestEnumOne colorEnum = TestE ...

  9. jQuery中操作属性的方法attr与prop的区别

    attr 与 prop 都可以对某个属性进行获取和设置的操作,二者的用法相同: <script src = 'jQuery.js'></script> <script&g ...

  10. 【Scala】通过简洁代码搞明白伴生关系、主构造器和辅助构造器的关系

    /** * 主构造器直接定义在类名称的后面,参数列表和类名写在一起 * 主构造器的参数会自动提升为对象的属性,不需要在对象中重新定义一遍 */ class Student(val id: Int, n ...