Pygame游戏挪威语特殊字符Windows乱码、Linux正常的原因与解决
问题分析与解决方案
核心原因
你遇到的乱码是典型的编码 mismatch 问题:UTF-8 编码的挪威语特殊字符(æ/ø/å)被错误地用 Windows 默认单字节编码(如 Windows-1252、ISO-8859-1)解码,导致出现AndvÃ╎rhÃ¥r这类 mojibake。Linux 系统默认使用 UTF-8 编码栈,所以显示正常;旧存档中已经写入了错误编码的字符,导致读取时持续乱码,新建存档则避开了这部分脏数据。
具体修复步骤
强制存档读写用 UTF-8:检查所有处理存档的代码,读写时必须明确指定
encoding="utf-8",写入 JSON 时还要加ensure_ascii=False避免转义特殊字符:# 写入存档示例 with open('player_save.json', 'w', encoding='utf-8') as f: json.dump(player_data, f, ensure_ascii=False) # 读取存档示例 with open('player_save.json', 'r', encoding='utf-8') as f: player_data = json.load(f)修复旧乱码存档(可选):如果需要保留用户旧存档,可以把错误编码的文本转回来:
# 读取乱码内容,按错误编码解码再转成正确UTF-8 with open('old_broken_save.json', 'r', encoding='windows-1252') as f: raw_text = f.read() fixed_text = raw_text.encode('windows-1252').decode('utf-8') # 解析并重新保存为正确编码的存档 fixed_data = json.loads(fixed_text) with open('fixed_save.json', 'w', encoding='utf-8') as f: json.dump(fixed_data, f, ensure_ascii=False)验证 Pygame 字体支持:确认游戏使用的字体文件支持挪威语特殊字符,避免用系统默认字体(部分 Windows 字体对小众语言字符支持不全)。建议嵌入开源多语言字体(如 Noto Sans),并在代码中指定加载:
game_font = pygame.font.Font('assets/fonts/NotoSans-Regular.ttf', 22)确认 JSON 文件编码:确保
names.json本身是无 BOM 的 UTF-8 编码保存的——可以用 VS Code 这类编辑器打开,查看右下角的编码标识,若不是 UTF-8 则转码后重新保存。
内容的提问来源于stack exchange,提问作者AriArtsy
相关产品推荐
相关产品推荐

