鱼C论坛

 找回密码
 立即注册
查看: 2285|回复: 13

又双叒叕是编码问题

[复制链接]
发表于 2023-3-25 17:43:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
众所周知,pygame zero 的程序运行方式有两种:
1. 普通运行
2. pgzrun xxx.py(.py文件里不用import pgzrun和pgzrun.go)
那么为什么我普通运行(IDLE,not pycharm)可以正常显示中文标题的窗口,pgzrun运行就会乱码?
(程序:
WIDTH = 640
HEIGHT = 480
TITLE = '跑酷'
这样会乱码;
import pgzrun
...
pgzrun.go()
且用普通方式运行就不会乱码。
我以为是GBK编码的问题,结果改了编码:
TITLE = '跑酷'.encode().decode('utf-8')
就报错了
pygame 2.1.3 (SDL 2.0.22, Python 3.9.9)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "C:\Users\防止偷窥\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\防止偷窥\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\防止偷窥\AppData\Local\Programs\Python\Python39\Scripts\pgzrun.exe\__main__.py", line 7, in <module>
  File "C:\Users\防止偷窥\AppData\Local\Programs\Python\Python39\lib\site-packages\pgzero\runner.py", line 92, in main
    exec(code, mod.__dict__)
  File "paoku.py", line 4, in <module>
    TITLE = '跑酷-Pgzero'.encode().decode('gbk')
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 8: illegal multibyte sequence
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-25 17:55:09 | 显示全部楼层
pgzrun --encoding=utf-8 xxx.py
问gpt的,不知道靠不靠谱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 19:07:54 | 显示全部楼层
鱼cpython学习者 发表于 2023-3-25 17:55
pgzrun --encoding=utf-8 xxx.py
问gpt的,不知道靠不靠谱

不靠谱。
pgzrun: error: no such option: --encoding
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 19:14:41 | 显示全部楼层
那应该是你.py文件编码问题 吧。
使用记事本打开.py文件,”另存为“可以看到用的是什么编码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 19:15:20 | 显示全部楼层
ba21 发表于 2023-3-25 19:14
那应该是你.py文件编码问题 吧。
使用记事本打开.py文件,”另存为“可以看到用的是什么编码。

utf-8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 19:21:11 | 显示全部楼层
从你的描述和所提供的错误信息来看,这个问题似乎是由于 pgzrun 和普通运行方式在处理窗口标题编码时的差异导致的。

首先需要了解的是,Python 3 默认使用的编码是 UTF-8,因此在源代码中直接使用中文字符串是没有问题的。

然而,在使用 pgzrun 运行时,似乎它不能很好地处理非ASCII字符的窗口标题。

为了解决这个问题,可以考虑将窗口标题转换为包含 Unicode 转义序列的字符串。

这样可以避免由于编码问题导致的乱码。试着将你的标题设置为如下格式:
TITLE = '跑酷'
TITLE_UNICODE = TITLE.encode('unicode_escape').decode('utf-8')


然后在程序中使用 TITLE_UNICODE 作为窗口标题。这样做应该可以在两种运行方式下都显示正确的中文标题。

此外,关于你尝试的解决方案:
TITLE = '跑酷'.encode().decode('utf-8')


这里你首先对字符串进行了编码,然后立即对其进行了解码。由于默认编码和解码都是 UTF-8,这样做实际上没有改变原始字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 19:21:44 | 显示全部楼层

看看我的机器人助手靠不靠谱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 19:53:17 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-3-25 19:57 编辑
isdkz 发表于 2023-3-25 19:21
看看我的机器人助手靠不靠谱


不靠谱。
显示

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 19:54:04 | 显示全部楼层

事实证明 pgzrun 只能识别ANSI编码
在.py前面指定编码即可。
#!/usr/bin/python
# -*- coding: ANSI -*-
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 19:55:35 | 显示全部楼层
ba21 发表于 2023-3-25 19:54
事实证明 pgzrun 只能识别ANSI编码
在.py前面指定编码即可。

不行,只显示\u...\u...-pgzero
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 20:04:17 | 显示全部楼层
歌者文明清理员 发表于 2023-3-25 19:55
不行,只显示%u...%u...-pgzero

还能显示这样,你不查查自已出了什么问题?
简单问题简单代码调试。
2023325_200247.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 20:06:22 | 显示全部楼层
ba21 发表于 2023-3-25 20:04
还能显示这样,你不查查自已出了什么问题?
简单问题简单代码调试。

还是不行
哇,WINDOWS XP!求之不得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 20:19:33 | 显示全部楼层
歌者文明清理员 发表于 2023-3-25 20:06
还是不行
哇,WINDOWS XP!求之不得

奇怪了,为什么我运行不乱码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 20:20:10 | 显示全部楼层

看来我的助手还得再调教调教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 20:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表