When running R in an ASCII locale (export LC_ALL=C) on Linux, is this expected?

foo <- "\xe4"
Encoding(foo) <- "latin1"
foo
# [1] "<e4>"
nchar(foo)
# [1] 4
nchar(foo, type = "bytes")
# [1] 1
nchar(foo, type = "width")
# [1] 4

That is, the number of characters reported for the default 'type = "chars"' is the number of characters (4) used for printing the unknown byte.

Obviously, one byte is one character in the single-byte ISO-8859-1 "latin1" encoding. Therefore I think the result of 4 characters for 1 byte is wrong, or unintuitive.

If this is as expected, maybe it should be mentioned in the '?nchar' manual as a special case. Yes, I did try to read the manual for an explanation. According to the manual, the result should be "The number of human-readable characters", but there is the note that:

     This does *not* by default give the number of characters that will
     be used to 'print()' the string.  Use 'encodeString' to find that.

For UTF-8 strings, nchar() does work correctly (as documented) even in the C locale.

foo2 <- "\xc3\xa4"
Encoding(foo2) <- "UTF-8"
foo2
# [1] "<U+00E4>"
nchar(foo2)
# [1] 1
nchar(foo2, type = "bytes")
# [1] 2
nchar(foo2, type = "width")
# [1] 1

But, confusingly, encodeString() does not agree with print(), contrary to the document '?encodeString':

encodeString(foo2)
# [1] "\\u00e4"

I was using "R Under development (unstable) (2017-02-23 r72248)".

--
Mikko Korpela
Department of Geosciences and Geography
University of Helsinki

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to