歌者文明清理员 发表于 2023-3-25 17:43:25

又双叒叕是编码问题

众所周知,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

鱼cpython学习者 发表于 2023-3-25 17:55:09

pgzrun --encoding=utf-8 xxx.py
问gpt的,不知道靠不靠谱

歌者文明清理员 发表于 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

ba21 发表于 2023-3-25 19:14:41

那应该是你.py文件编码问题 吧。
使用记事本打开.py文件,”另存为“可以看到用的是什么编码。

歌者文明清理员 发表于 2023-3-25 19:15:20

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

utf-8

isdkz 发表于 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,这样做实际上没有改变原始字符串。

isdkz 发表于 2023-3-25 19:21:44

歌者文明清理员 发表于 2023-3-25 19:07
不靠谱。

看看我的机器人助手靠不靠谱{:10_256:}

歌者文明清理员 发表于 2023-3-25 19:53:17

本帖最后由 歌者文明清理员 于 2023-3-25 19:57 编辑

isdkz 发表于 2023-3-25 19:21
看看我的机器人助手靠不靠谱

不靠谱。
显示https://t1.wodetu.cn/2023/03/25/f626270584dbfc787805f6cfff503e09.png

ba21 发表于 2023-3-25 19:54:04

歌者文明清理员 发表于 2023-3-25 19:15
utf-8

事实证明 pgzrun 只能识别ANSI编码
在.py前面指定编码即可。
#!/usr/bin/python
# -*- coding: ANSI -*-

歌者文明清理员 发表于 2023-3-25 19:55:35

ba21 发表于 2023-3-25 19:54
事实证明 pgzrun 只能识别ANSI编码
在.py前面指定编码即可。

不行,只显示\u...\u...-pgzero

ba21 发表于 2023-3-25 20:04:17

歌者文明清理员 发表于 2023-3-25 19:55
不行,只显示%u...%u...-pgzero

还能显示这样,你不查查自已出了什么问题?
简单问题简单代码调试。

歌者文明清理员 发表于 2023-3-25 20:06:22

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

还是不行
哇,WINDOWS XP!求之不得

isdkz 发表于 2023-3-25 20:19:33

歌者文明清理员 发表于 2023-3-25 20:06
还是不行
哇,WINDOWS XP!求之不得

奇怪了,为什么我运行不乱码?

isdkz 发表于 2023-3-25 20:20:10

歌者文明清理员 发表于 2023-3-25 19:53
不靠谱。
显示

看来我的助手还得再调教调教{:10_256:}
页: [1]
查看完整版本: 又双叒叕是编码问题