如何在 Windows 下显示带有 Unicode 字符的消息/警告/错误?
Posted
技术标签:
【中文标题】如何在 Windows 下显示带有 Unicode 字符的消息/警告/错误?【英文标题】:How to display a message/warning/error with Unicode characters under Windows? 【发布时间】:2015-12-18 05:07:17 【问题描述】:我有一条包含 Unicode 字符的消息(或警告或错误)。 (字符串有UTF-8
编码。)
x <- "\u20AC \ub124" # a euro symbol, and Hangul 'ne'
## [1] "€ 네"
Encoding(x)
## [1] "UTF-8"
在 Linux 下,如果语言环境是 UTF-8(l10n_info()$`UTF-8`
返回 TRUE
),则会在消息中打印 OK。
我可以强制这样做,例如,
devtools::with_locale(
c(LC_CTYPE = "en_US.utf8"),
message(x)
)
## € 네
在 Windows 下没有 UTF-8 语言环境,所以我找不到强制正确打印的等效方法。例如,对于美国语言环境,韩文字符无法正确显示。
devtools::with_locale(
c(LC_CTYPE = "English_United States"),
message(x)
)
## € <U+B124>
在 Windows 下打印数据帧时,有一个带有 Unicode 字符的 related problem 无法正确显示。那里的建议是将语言环境设置为中文/日文/韩文。这在这里不起作用。
devtools::with_locale(
c(LC_CTYPE = "Korean_Korea"),
message(x)
)
## ¢æ ³× # equivalent to iconv(x, "UTF-8", "EUC-KR")
如何在 Windows 下正确显示 UTF-8 消息、警告和错误?
【问题讨论】:
您指的是哪个 Windows 版本?我怀疑你无法在 Windows 7 上解决这个问题,但也许其他版本最终获得了适当的 Unicode 支持。 (但是我没有屏住呼吸) @mpiktas 我在 Windows 7 下对其进行了测试,尽管 AFAIK,R 也不支持新版本 Windows 的 UTF-8 语言环境,所以我怀疑这个问题适用于所有版本。很高兴被证明是错误的。 我怀疑打印到 stderr 有问题。message
打印到 stderr,然后我们有一个问题:比较 cat(x, file = stdout())
和 cat(x, file = stderr())
。我尝试查看 R 源代码,但我发现打印到 stdout 和 stderr 是通过不同的函数完成的,但我缺乏 R 内部知识,无法找到问题的根源。
另外,如果您查看Encoding(capture.output(print(x)))
,您会发现编码不是“UTF-8”。所以我只能推测,当打印到标准错误时,编码信息的某个地方会被破坏。
@mpiktas 是的,capture.output
的问题是我前几天发现的一个错误。 bugs.r-project.org/bugzilla3/show_bug.cgi?id=16539,我已经将此 stderr 问题作为另一个错误 bugs.r-project.org/bugzilla3/show_bug.cgi?id=16543 提交
【参考方案1】:
我注意到 R 中函数 Sys.setlocale() 的帮助说明:“LC_MESSAGES”在不支持消息翻译的系统上将为“C”,Windows 不支持.
对我来说,这听起来像是在任何 Windows 版本上都无法修改 R 消息/错误的字符表示...
【讨论】:
以上是关于如何在 Windows 下显示带有 Unicode 字符的消息/警告/错误?的主要内容,如果未能解决你的问题,请参考以下文章
自己编写的中文PHP网页,如何在Unicode(UTF-8)编码下能正常显示汉字而不是乱码?
无法在 Windows 对话框上显示其他 unicode 东亚语言