LLVM 7.0.1 安装程序中的文本损坏
Text corruption in LLVM 7.0.1 installer
我已经尝试在 Windows 10 上安装 llvm 7.0.1。
但是安装程序有如下所示的文本损坏。
它使安装变得更加困难。
我如何解决它?
我用的是Windows10 1809,chcp是65001.
我用的是日文。
我在区域设置中启用了 "Use Unicode UTF-8 for worldwide language support"。
这个变化是错误的原因吗?
但是其他应用程序的安装程序不会出现文本损坏。
更新:
兼容模式安装程序图片(Windows XP SP3)
Too long for a comment.
UPDATE:稍微看一下,我想知道问题是否是字体损坏问题。这里有重建字体缓存的描述:http://www.trishtech.com/2013/11/rebuild-fonts-cache-windows-8/。我想你必须先安装一份好的字体文件吗?你通过将字体文件复制到我相信的字体文件夹中来做到这一点。我会和 Anders 核实 NSIS 使用的字体。
MSI 文件存在类似问题:Windows Installer ugly font rendering。
兼容模式:很确定UTF8设置会导致它。我认为它行不通,但我首先要尝试的是 运行 兼容模式下的可执行文件 .
- 找到有问题的
setup.exe
。
- 右键单击 EXE,按住鼠标右键,现在拖动到空白桌面区域并释放鼠标按钮。单击“在此处创建快捷方式”。
Right click Shortcut
=>
Properties
=>
Compatibilty
选项卡
- 在兼容模式下尝试“运行程序的各种组合...”
- 我会先尝试“Windows XP”最高服务包。完成后点击
OK
。
- 现在双击启动可执行文件的快捷方式,看看会发生什么。
该 LLVM 安装程序不是 Unicode NSIS 安装程序。 LLVM 团队可以通过将 Unicode True
添加到他们的 NSIS 脚本来修复它。
那个 LLVM 安装程序看起来支持多种语言(我找不到它的源代码,它可能正在使用 CMake/Ninja)并且 NSIS 确实尝试猜测正确的语言,但这是基于 return GetUserDefaultUILanguage()
的值而不是活动代码页。
我无法在 build 18290 上复制您的问题(更改为 UTF-8 并重新启动后我验证了 GetACP()
returns 65001)但这可能是因为我的系统被检测为英语通过 NSIS。
根据你屏幕截图中“下一步”按钮中的 (N)
,我猜测你的 UI 语言被检测为中文或日语?
如果没有关于您系统的更多信息,很难猜测这是 NSIS 中的错误还是 Windows。 NSIS 是一个相对正常的应用程序,不会在其接口字符串 (IIRC) 上调用 MultiByteToWideChar
。
编辑:
通过强制安装程序选择日语,我可以重现您的问题。如果您希望使用日语作为显示语言安装此应用程序,则此问题的解决方案是将 "language for non-Unicode programs" 切换回日语。您可以尝试的另一种解决方案是为单个应用程序设置语言环境。 AppLocale was Microsoft's solution to this but it is not supported on Windows 10 but there are other alternatives out there。
在不支持 Unicode 的情况下构建 NSIS 安装程序时,程序会在内部将文本存储为使用特定语言的代码页编码的原始字节。在 运行 时,它使用 SetWindowTextA
之类的函数来设置 UI 元素的文本。这就是自 Windows 时代以来非 Unicode 应用程序的工作方式。所有显示 ASCII 范围之外的文本的非 Unicode 程序都会有同样的问题,除非它们被专门编写为支持 UTF-8 作为活动代码页(这不太可能,因为它是一项新功能)。此功能仅对假定窄字符串为 UTF-8 编码的控制台应用程序和移植 POSIX 应用程序有用。
我已经尝试在 Windows 10 上安装 llvm 7.0.1。
但是安装程序有如下所示的文本损坏。
它使安装变得更加困难。
我如何解决它?
我用的是Windows10 1809,chcp是65001.
我用的是日文。
我在区域设置中启用了 "Use Unicode UTF-8 for worldwide language support"。
这个变化是错误的原因吗? 但是其他应用程序的安装程序不会出现文本损坏。
更新:
兼容模式安装程序图片(Windows XP SP3)
Too long for a comment.
UPDATE:稍微看一下,我想知道问题是否是字体损坏问题。这里有重建字体缓存的描述:http://www.trishtech.com/2013/11/rebuild-fonts-cache-windows-8/。我想你必须先安装一份好的字体文件吗?你通过将字体文件复制到我相信的字体文件夹中来做到这一点。我会和 Anders 核实 NSIS 使用的字体。
MSI 文件存在类似问题:Windows Installer ugly font rendering。
兼容模式:很确定UTF8设置会导致它。我认为它行不通,但我首先要尝试的是 运行 兼容模式下的可执行文件 .
- 找到有问题的
setup.exe
。 - 右键单击 EXE,按住鼠标右键,现在拖动到空白桌面区域并释放鼠标按钮。单击“在此处创建快捷方式”。
Right click Shortcut
=>
Properties
=>
Compatibilty
选项卡- 在兼容模式下尝试“运行程序的各种组合...”
- 我会先尝试“Windows XP”最高服务包。完成后点击
OK
。 - 现在双击启动可执行文件的快捷方式,看看会发生什么。
该 LLVM 安装程序不是 Unicode NSIS 安装程序。 LLVM 团队可以通过将 Unicode True
添加到他们的 NSIS 脚本来修复它。
那个 LLVM 安装程序看起来支持多种语言(我找不到它的源代码,它可能正在使用 CMake/Ninja)并且 NSIS 确实尝试猜测正确的语言,但这是基于 return GetUserDefaultUILanguage()
的值而不是活动代码页。
我无法在 build 18290 上复制您的问题(更改为 UTF-8 并重新启动后我验证了 GetACP()
returns 65001)但这可能是因为我的系统被检测为英语通过 NSIS。
根据你屏幕截图中“下一步”按钮中的 (N)
,我猜测你的 UI 语言被检测为中文或日语?
如果没有关于您系统的更多信息,很难猜测这是 NSIS 中的错误还是 Windows。 NSIS 是一个相对正常的应用程序,不会在其接口字符串 (IIRC) 上调用 MultiByteToWideChar
。
编辑:
通过强制安装程序选择日语,我可以重现您的问题。如果您希望使用日语作为显示语言安装此应用程序,则此问题的解决方案是将 "language for non-Unicode programs" 切换回日语。您可以尝试的另一种解决方案是为单个应用程序设置语言环境。 AppLocale was Microsoft's solution to this but it is not supported on Windows 10 but there are other alternatives out there。
在不支持 Unicode 的情况下构建 NSIS 安装程序时,程序会在内部将文本存储为使用特定语言的代码页编码的原始字节。在 运行 时,它使用 SetWindowTextA
之类的函数来设置 UI 元素的文本。这就是自 Windows 时代以来非 Unicode 应用程序的工作方式。所有显示 ASCII 范围之外的文本的非 Unicode 程序都会有同样的问题,除非它们被专门编写为支持 UTF-8 作为活动代码页(这不太可能,因为它是一项新功能)。此功能仅对假定窄字符串为 UTF-8 编码的控制台应用程序和移植 POSIX 应用程序有用。