如何在不改变操作系统语言的情况下修复 Wine 应用程序中损坏的编码?

如何在不改变操作系统语言的情况下修复 Wine 应用程序中损坏的编码?

我谈论的应用程序是 Worms Armageddon (WA)。我在 wine 下运行它。

考虑以下序列:

  • 将 Ubuntu GUI 语言切换为俄语(并重新启动会话)
  • 将 Ubuntu 键盘布局切换为俄语
  • 在 Wine 下运行 WA
  • 在 WA 聊天中输入一些西里尔字母

-- 当我这样做时,编码没有问题。但如果我将 Ubuntu GUI 语言切换回英语(并重新启动会话),那么在聊天中输入西里尔字符时(使用俄语键盘布局),聊天中显示的是问号(????、? ?????!..)而不是西里尔字符。

我猜这与 Windows 代码页有某种关系。在俄语中,默认代码页是 cp1251,而在英语中可能是其他欧洲代码页。

所以我的问题是:如何在不将 GUI 语言切换为俄语的情况下在 WA 聊天中输入和阅读西里尔字母?

PS 初始桌面图标是:

[Desktop Entry]
Name=Worms Armageddon
Exec=env WINEPREFIX="/home/uname/.wine" wine C:\\\\windows\\\\command\\\\start.exe /Unix /home/uname/.wine/dosdevices/c:/users/Public/Desktop/Worms\\ Armageddon.lnk
Type=Application
StartupNotify=true
Path=/home/uname/.wine/dosdevices/c:/GOG Games/Worms Armageddon/
Icon=4948_goggame-1462173886.0
StartupWMClass=wa.exe

并且Worms Armageddon.lnk是指向

C:\GOG Games\Worms Armageddon\WA.exe

答案1

首先,命令行:

LANG=ru_RU.UTF-8 WINEPREFIX="/home/uname/.wine" wine /home/uname/.wine/drive_c/GOG\ Games/Worms\ Armageddon/WA.exe

在命令行开头设置的环境变量仅影响该命令行。您可以使用在单独的行中设置它,export LANG=...但这会影响导出后该 shell 中的所有命令。

第二,.desktop 快捷方式:

[Desktop Entry]
Name=Worms Armageddon
Exec=env LANG=ru_RU.UTF-8 env WINEPREFIX="/home/uname/.wine" wine C:\\\\windows\\\\command\\\\start.exe /Unix /home/uname/.wine/dosdevices/c:/users/Public/Desktop/Worms\\ Armageddon.lnk
Type=Application
StartupNotify=true
Path=/home/uname/.wine/dosdevices/c:/GOG Games/Worms Armageddon/
Icon=4948_goggame-1462173886.0
StartupWMClass=wa.exe

将 worms.desktop 文件放在上面,~/.local/share/applications/
注意,你使用了默认的 wine 前缀,不需要在命令行中指定它

也许你想在脚本中使用它,它是这样的:

#!/bin/bash
export LANG=ru_RU.UTF-8
export WINEPREFIX="/home/uname/.wine"
wine /home/uname/.wine/drive_c/GOG\ Games/Worms\ Armageddon/WA.exe

导出变量仅在该脚本内部有效

参考

相关内容