我想从 buildroot 构建一个可以显示 Unicode 字符的 32 位 x86 ISO 映像。我怎样才能做到这一点?
- 在 中
make menuconfig
,我设置了BR2_ENABLE_LOCALE_WHITELIST="C en_US en_US.UTF-8"
- 在 中,我
make busybox-menuconfig
设置了CONFIG_UNICODE_SUPPORT=y
,CONFIG_UNICODE_USING_LOCALE=y
,CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
,CONFIG_UNICODE_COMBINING_WCHARS=y
,CONFIG_UNICODE_WIDE_WCHARS=y
,CONFIG_UNICODE_BIDI_SUPPORT=y
,CONFIG_UNICODE_NEUTRAL_TABLE=y
CONFIG_UNICODE_PRESERVE_BROKEN=y
- 在编译机(基于Debian)上,我已经安装了软件包
locales
并运行sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen; locale-gen
但是,当我构建图像时,保存到文本文件或输入终端的 Unicode 文本会出现乱码。
我测试的一种方法是echo -e '\xe2\x82\xac'
在 shell 中运行。这应该会打印欧元符号,这在我的 Mac 终端上是这样的。然而,在生成的 iso 映像中,我看到:
unfortunate # echo -e '\xe2\x82\xac'
â¬
更全面的背景
- 我的主要项目在这里https://github.com/mrled/unfortunate/(注意子模块)
- 我正在使用的 defconfig 文件位于https://github.com/mrled/unfortunate-browser-vm/blob/03dfb210d57a0e665da5cee108c2d9c052d66f5b/buildroot-v86/configs/v86_defconfig
- 我正在使用的 busybox 配置位于https://github.com/mrled/unfortunate-browser-vm/blob/03dfb210d57a0e665da5cee108c2d9c052d66f5b/buildroot-v86/board/v86/busybox.config
- 我正在使用的内核配置位于https://github.com/mrled/unfortunate-browser-vm/blob/03dfb210d57a0e665da5cee108c2d9c052d66f5b/buildroot-v86/board/v86/linux.config
- 该项目实际上旨在在 v86 浏览器内(客户端!)x86 模拟器中运行,因此您可以
echo
亲自尝试我的命令:https://unfortunate.micahrl.com。 (启动虚拟机可能需要 15-30 秒。)
答案1
在 Debian 上,有一些unicode_start
shellscript 可以将系统设置为 UTF-8。您应该在 shell 中发出的主要命令是:
printf '\033%%G'
stty iutf8
我在非常有趣的 StackExchange 线程中找到了这些:如何在 Linux 控制台中启用 UTF-8 支持?
我也在努力在我的 buildroot 系统上建立一个像样的 Unicode 设置,这些命令有点帮助,但我仍然面临着以 UTF-8 编码的 shellscript 的问题,这些问题拒绝在我的目标系统上正确执行。
希望有帮助!干杯,休格斯