【问题标题】:How to display a message/warning/error with Unicode characters under Windows?如何在 Windows 下显示带有 Unicode 字符的消息/警告/错误?
【发布时间】: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 提交

标签: r unicode utf-8


【解决方案1】:

我注意到 R 中函数 Sys.setlocale() 的帮助说明:“LC_MESSAGES”在不支持消息翻译的系统上将为“C”,Windows 不支持.

对我来说,这听起来像是在任何 Windows 版本上都无法修改 R 消息/错误的字符表示...

【讨论】:

    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2017-08-31
    • 2011-01-07
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多