Richard Cotton
2015-Sep-22 12:55 UTC
[Rd] Differences in printing UTF-8 strings to stdout vs. stderr under Windows
It seems that under Windows, some UTF-8 strings that print OK to stdout do not print correctly to stderr. To reproduce: x <- "\ub124" cat(x, file = stdout()) ## ? cat(x, file = stderr()) ## <U+B124> Original motivating problem here: https://stackoverflow.com/questions/32696241/how-to-display-a-message-warning-error-with-unicode-characters-under-windows How does printing to stderr differ from printing to stdout? And more importantly, is there any way I can ensure correct printing of Unicode characters when I need to write to stderr (when throwing errors or warnings)? -- Regards, Richie Learning R 4dpiecharts.com
Duncan Murdoch
2015-Sep-22 13:32 UTC
[Rd] Differences in printing UTF-8 strings to stdout vs. stderr under Windows
On 22/09/2015 8:55 AM, Richard Cotton wrote:> It seems that under Windows, some UTF-8 strings that print OK to > stdout do not print correctly to stderr. To reproduce: > > x <- "\ub124" > cat(x, file = stdout()) > ## ? > cat(x, file = stderr()) > ## <U+B124> > > Original motivating problem here: > https://stackoverflow.com/questions/32696241/how-to-display-a-message-warning-error-with-unicode-characters-under-windows > > How does printing to stderr differ from printing to stdout? > > And more importantly, is there any way I can ensure correct printing > of Unicode characters when I need to write to stderr (when throwing > errors or warnings)? >The answer to the last question is certainly "no". If you are running Rterm, you are limited to printing in the native encoding, and that won't cover all Unicode characters. In Rgui we make more of an effort to convert characters to UTF-16, which covers most Unicode characters. (I think we still don't handle surrogate pairs, but they're rarely used.) Apparently this is done for stdout() but not for stderr(). I don't know the rationale for that design. Duncan Murdoch