一开始在做Flappy Bird小游戏时面临中文乱码显示问题,如下所示:

一开始我还以为是Python编码问题,然而Python3中自动解决了中文显示问题,最简单的例子就是用print()语句进行打印,于是想起来是pygame界面显示中文的问题。

在通过网上查找的方式下,总结了3种方式,这里把自己探索的过程列举下来,并不是所有方式都能正常解决的,主要是展现出解决问题的方式,供大家参考。

1.采用font.get_fonts()函数查看系统字体。

这里将系统字体粘贴下来,每个字体代表什么意思,大家自行查阅,大部分都是微软提供的字体。

['arial', 'arialblack', 'bahnschrift', 'calibri', 'cambriacambriamath', 'cambria', 'candara', 'comicsansms', 'consolas', 'constantia', 'corbel', 'couriernew', 'ebrima', 'franklingothicmedium', 'gabriola', 'gadugi', 'georgia', 'impact', 'inkfree', 'javanesetext', 'leelawadeeui', 'leelawadeeuisemilight', 'lucidaconsole', 'lucidasans', 'malgungothic', 'malgungothicsemilight', 'microsofthimalaya', 'microsoftjhengheimicrosoftjhengheiui', 'microsoftjhengheimicrosoftjhengheiuibold', 'microsoftjhengheimicrosoftjhengheiuilight', 'microsoftnewtailue', 'microsoftphagspa', 'microsoftsansserif', 'microsofttaile', 'microsoftyaheimicrosoftyaheiui', 'microsoftyaheimicrosoftyaheiuibold', 'microsoftyaheimicrosoftyaheiuilight', 'microsoftyibaiti', 'mingliuextbpmingliuextbmingliuhkscsextb', 'mongolianbaiti', 'msgothicmsuigothicmspgothic', 'mvboli', 'myanmartext', 'nirmalaui', 'nirmalauisemilight', 'palatinolinotype', 'segoemdl2assets', 'segoeprint', 'segoescript', 'segoeui', 'segoeuiblack', 'segoeuiemoji', 'segoeuihistoric', 'segoeuisemibold', 'segoeuisemilight', 'segoeuisymbol', 'simsunnsimsun', 'simsunextb', 'sitkasmallsitkatextsitkasubheadingsitkaheadingsitkadisplaysitkabanner', 'sitkasmallsitkatextboldsitkasubheadingboldsitkaheadingboldsitkadisplayboldsitkabannerbold', 'sitkasmallsitkatextbolditalicsitkasubheadingbolditalicsitkaheadingbolditalicsitkadisplaybolditalicsitkabannerbolditalic', 'sitkasmallsitkatextitalicsitkasubheadingitalicsitkaheadingitalicsitkadisplayitalicsitkabanneritalic', 'sylfaen', 'symbol', 'tahoma', 'timesnewroman', 'trebuchetms', 'verdana', 'webdings', 'wingdings', 'yugothicyugothicuisemiboldyugothicuibold', 'yugothicyugothicuilight', 'yugothicmediumyugothicuiregular', 'yugothicregularyugothicuisemilight', 'dengxian', 'fangsong', 'kaiti', 'simhei', 'holomdl2assets', '方正粗黑宋简体', 'numberonly', 'acaslonproboldopentype', 'acaslonprobolditalicopentype', 'acaslonproitalicopentype', 'acaslonproregularopentype', 'acaslonprosemiboldopentype', 'acaslonprosemibolditalicopentype', 'adobefangsongstdregularopentype', 'adobefanheitistdboldopentype', 'adobegothicstdboldopentype', 'adobeheitistdregularopentype', 'adobekaitistdregularopentype', 'adobenaskhmediumopentype', 'agaramondproboldopentype', 'agaramondprobolditalicopentype', 'agaramondproitalicopentype', 'agaramondproregularopentype', 'birchstdopentype', 'blackoakstdopentype', 'brushscriptstdopentype', 'chaparralproboldopentype', 'chaparralprobolditopentype', 'chaparralproitalicopentype', 'chaparralprolightitopentype', 'chaparralproregularopentype', 'charlemagnestdboldopentype', 'cooperblackstditalicopentype', 'cooperblackstdopentype', 'giddyupstdopentype', 'hobostdopentype', 'kozgoproboldopentype', 'kozgoproextralightopentype', 'kozgoproheavyopentype', 'kozgoprolightopentype', 'kozgopromediumopentype', 'kozgoproregularopentype', 'kozminproboldopentype', 'kozminproextralightopentype', 'kozminproheavyopentype', 'kozminprolightopentype', 'kozminpromediumopentype', 'kozminproregularopentype', 'lithosproblackopentype', 'lithosproregularopentype', 'mesquitestdopentype', 'minionproboldcnopentype', 'minionproboldcnitopentype', 'minionpromediumopentype', 'minionpromediumitopentype', 'minionprosemiboldopentype', 'minionprosemibolditopentype', 'myriadarabicopentype', 'nuevastdboldopentype', 'nuevastdboldcondopentype', 'nuevastdboldconditalicopentype', 'nuevastdcondopentype', 'nuevastdconditalicopentype', 'nuevastditalicopentype', 'ocrastdopentype', 'oratorstdslantedopentype', 'oratorstdopentype', 'poplarstdopentype', 'prestigeelitestdbdopentype', 'rosewoodstdregularopentype', 'stencilstdopentype', 'tektonproboldopentype', 'tektonproboldcondopentype', 'tektonproboldextopentype', 'tektonproboldoblopentype', 'trajanproboldopentype', 'trajanproregularopentype', 'adobearabicboldopentype', 'adobearabicbolditalicopentype', 'adobearabicitalicopentype', 'adobearabicregularopentype', 'adobedevanagariboldopentype', 'adobedevanagaribolditalicopentype', 'adobedevanagariitalicopentype', 'adobedevanagariregularopentype', 'adobehebrewboldopentype', 'adobehebrewbolditalicopentype', 'adobehebrewitalicopentype', 'adobehebrewregularopentype', 'adobemingstdlightopentype', 'adobemyungjostdmediumopentype', 'adobesongstdlightopentype', 'kozgopr6nboldopentype', 'kozgopr6nextralightopentype', 'kozgopr6nheavyopentype', 'kozgopr6nlightopentype', 'kozgopr6nmediumopentype', 'kozgopr6nregularopentype', 'kozminpr6nboldopentype', 'kozminpr6nextralightopentype', 'kozminpr6nheavyopentype', 'kozminpr6nlightopentype', 'kozminpr6nmediumopentype', 'kozminpr6nregularopentype', 'lettergothicstdboldopentype', 'lettergothicstdboldslantedopentype', 'lettergothicstdslantedopentype', 'lettergothicstdopentype', 'minionproboldopentype', 'minionprobolditopentype', 'minionproitopentype', 'minionproregularopentype', 'myriadhebrewopentype', 'myriadproboldopentype', 'myriadproboldcondopentype', 'myriadproboldconditopentype', 'myriadprobolditopentype', 'myriadprocondopentype', 'myriadproconditopentype', 'myriadproitopentype', 'myriadproregularopentype', 'myriadprosemiboldopentype', 'myriadprosemibolditopentype', 'buxtonsketch', 'segoemarker', 'sketchflowprint', 'fzshuti', 'fzyaoti', 'lisu', 'stcaiyun', 'stfangsong', 'sthupo', 'stkaiti', 'stliti', 'stsong', 'stxihei', 'stxingkai', 'stxinwei', 'stzhongsong', 'youyuan', 'extra', 'arialms', 'century', 'wingdings2', 'wingdings3', 'icomoon']

当然,在这些字体中,用户也可以自己从网上下载字体,其实都在C:\Windows\Fonts路径下,只是这些字体的名称显示不同。

然后我们从列表中选择任一字体进行测试【还是用我们一开始用的Flappy Bird】:

这里我们选择列表中的唯一中文字体进行设置,也是成功的显示中文字体。结果如下:

我们同样采取一样的方式换成任意其它字体进行测试:consolas为例

然后我们选择lisu【也就是隶书】:

也能正常显示,其它的就不再一一进行测试,有的字体支持中文,有的不支持,当然了,也和每一个字体的含义有关,如微软字体中The New Roman字体就是我们最常用的英文和特殊符号的格式。感兴趣的可以进行测试其它字体以及他们的含义。

2.使用绝对路径的方式

上面我们已经介绍过,因为这些字体的来源都是C:\Windows\Fonts路径下的字体文件,所以我们也可以使用绝对路径的形式进行传递参数。

我们就以楷体进行测试。

记住这里的文件名并不是叫楷体常规,而是我们查看属性得到的文件名!!!!

我们复制路径粘贴到pycharm中的代码中,

这里我们发现不能正常显示,但是这里并不能直接否定不能直接显示,所以为了进行验证这种方式的可行性,我们专门用只有文本的pygame窗口进行显示,发现结果能正常显示。这里补充一下路径URL的斜杠问题,我们复制的路径是\斜杠,而我们使用的是/斜杠,这里在正则表达式那一篇文章中已经介绍过,我们如果使用\斜杠需要进行转义,否则Python解释器并不认识,解决方式是要么你用/斜杠,要么你使用\斜杠,但需要在路径前面加上字母u,表示原生字符。如下所示:

运行结果就是上面显示的那样,中文也是可以正常显示的,在我们的Flappy Bird程序中,可能是本人水平有限,暂时没有找到其不能显示 的原因。

这里需要注意,如果使用系统字体Arial,这个字体我们在Word中最常见,但是很多初学者并不清楚这个字体,最简单的来说在微软字体中它经常被用来设置数字字体,而且他对特殊符号和中文不起作用。这里将百科贴下来做一个简单了解,感兴趣的可以自行进行搜索。

我们在pycharm中进行验证。

很显然,这种字体不能用来设置中文字体,但是英文还是可以正常显示的。

这是在Word中的Arial字体,如果设置中文和标点符号,是不能设置的,只有数字可以设置为该字体。这里需要注意。

3.使用相对路径

与第二个方法类似,只不过URL使用的是相对路径,至于相对路径和绝对路径这里就不再进行介绍他们了,大部分人都知道,不知道的可以自行百度进行搜索。

这里介绍一下这种方式的应用场景,一般是能用相对路径是绝对不用绝对路径的,因为绝对路径是固定不变的,一旦文件的位置发生改变,绝对路径就会失效,而相对路径则不然。因此有了良好的可迁移性。还有一种常用的应用场景,就是我们可以把自己下载的字体文件进行设置,比如说我们下载的字体文件保存到了桌面,我们可以将此文件复制到我们写代码的Python文件的路径下,可以同一路径,也可以建立文件夹成为子路径,这一点根据需要进行设置即可。

好了,这些就是我为解决pygame界面显示中文乱码的过程,希望大家可以参考各种方法,找到适合自己的一种即可。

对了,最终再补充一点,如果使用默认的字体设置代码,中文也是不能正常显示的。

pygame中文乱码问题相关推荐

  1. python3默认编码格式_python3 中文乱码与默认编码格式设定方法

    python默认编码格式是utf-8.在python2.7中,可以通过sys.setdefaultencoding('gbk')设定默认编码格式,而在python3.3中sys.setdefaulte ...

  2. 【Python成长之路】 文字转图片(白底黑字,无中文乱码)

    目录 前言 一.两类解决方法 二.具体示例代码 1.pygame库 2.PIL库 总结 前言 有一次在知乎上看到一篇有关家庭照顾痴呆老人的帖子,其中有个作者的回复让我很感慨,因此想保存成图片并分享给其 ...

  3. SpringSecurity安全验证中文乱码问题

    使用SpringSecurity做安全验证时发现form表单中提交中文名会出现乱码问题. 原因是因为我在web.xml配置文件中将springSecurityFilterChain拦截器放在了 cha ...

  4. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  5. 关于HttpClient上传中文乱码的解决办法

    使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单: 第一步:设置Mult ...

  6. Servlet、MySQL中文乱码

    1.Servlet中文乱码: 在doPost或doGet方法里,加上以下两行即可: response.setContentType("text/html;charset=UTF-8" ...

  7. android java 中文乱码_android读写中文如何避免乱码详解

    前言 android读取文件中文出现乱码的原因无非就是,读取文件的字符格式与写如文件的格式不一致.因此,避免中文乱码,要在写入文件的时候按照一定的格式写入,读取的时候按照一定的格式读取.这样对应就不会 ...

  8. java servlet 参数乱码_JSPServlet处理参数中的中文乱码总结

    从form表单提交信息到一个JSP页面或者一个Servlet进行处理的时候,提交的中文信息若不加处理的话就会显示乱码,如一串???.现在通过一个例子来进行总结如下: 写一个用户信息提交页面,通过这个页 ...

  9. php pdo 中文乱码,php pdo oracle中文乱码的快速解决方法

    在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PAT ...

最新文章

  1. 【数字信号处理】相关函数 ( 卷积与交换性 | 相关函数不具有交换性 | 推导过程 )
  2. 使用李天平代码生成器中分页存储过程的问题
  3. 【Python】字符串对齐的常用方法
  4. html messagebox确定取消,Element MessageBox弹框的具体使用
  5. 自我训练——时间控制能力(四)
  6. 请说明Request和Session的生命周期
  7. MSDN Visual系列:利用关联来过滤MOSS中的BDC数据
  8. 健身房,我用python给她写了个小米计时器助人为乐
  9. [转]VC _T的用途
  10. ActiveMQ—Windows操作系统中如何安装启动ActiveMQ
  11. zerorpc java_Zerorpc 支持暴露多个远程Api接口类
  12. Android开发学习总结——appcompat_v7项目说明
  13. tornado、flask、c++zmq-req-rep记录
  14. matlab在常微分方程的应用,Matlab在常微分方程教学中的应用
  15. 读书笔记-MySql必知必会(二)
  16. 项目2-Time类中的运算符重载
  17. ES6常见面试题(二)
  18. Leetcode: Longest Valid Parentheses
  19. 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息
  20. 运筹学 知识点总结 (七)

热门文章

  1. 打怪游戏 勇者打恶龙v2.0
  2. iFunk游戏本性能大预测
  3. lv蒙田包二手价格_意大利买LV蒙田包
  4. 懒人精灵ocr文字查找工具的使用
  5. MybatisPlus-注解
  6. 一半人写不出冒泡排序,你的同龄人都躺下了
  7. 他用机器学习预测权力游戏结局: 龙妈小恶魔集体领盒饭?
  8. 图像处理过程中图像不能加载的其中一个原因解答
  9. eclipse控制流图插件——CFG生成器的安装
  10. 《天下无贼》经典语录