[R-SIG-Mac] accented vowels
Duncan Murdoch
murdoch.duncan at gmail.com
Tue Aug 16 01:06:29 CEST 2011
On 11-08-15 2:42 PM, Denis Chabot wrote:
> Hi,
>
> I usually do not give second thought to accented vowels and R handles everything fine thanks to UTF8 being used in my R scripts. But today I have a problem. Accented vowels do not behave properly when they were imported into R using list.files.
>
> Maybe this is because OS X (I'm using 10.6.8) still uses MacRoman for file names, though visually the names seem to have been read correctly into R.
>
> An example is better than words:
>
> sessionInfo()
> R version 2.13.1 (2011-07-08)
> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
>
> locale:
> [1] fr_CA.UTF-8/fr_CA.UTF-8/C/C/fr_CA.UTF-8/fr_CA.UTF-8
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
>
> This does not cause problem:
> a = c("1_MO2 crevettes po2crit.Rda", "1_MO2 soles Sète sda.Rda", "1_MO2 turbots po2crit.Rda"); a
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 soles Sète sda.Rda" "1_MO2 turbots po2crit.Rda"
>
> a2 = gsub(" Sète", "S", a); a2
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 solesS sda.Rda" "1_MO2 turbots po2crit.Rda"
>
>
> but if instead of creating the vector within the R script, I read it as a series of file names, the substitution does not work. I am sorry that I cannot make this a reproducible example as it requires the 3 files to exist on your computer, but you could create 3 dummy files having the same names in the directory of your choice.
>
> don = file.path("données/")
> b = list.files(path = don, pattern = "1_MO2"); b
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 soles Sète sda.Rda" "1_MO2 turbots po2crit.Rda"
>
> b2 = gsub(" Sète", "S", b); b2
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 soles Sète sda.Rda" "1_MO2 turbots po2crit.Rda"
>
> I am puzzled and also "stuck". For now I'll modify the file name, but I need to be able to handle such names at some point.
>
> Any advice?
Possibly your system really is using MacRoman or some other local
encoding; in that case, iconv(x, "", "UTF-8") should convert from the
local encoding to UTF-8.
I think declaring everything to be UTF8 may be sufficient. When I use
list.files(), I see the encoding listed as "unknown", but
x <- list.files()
Encoding(x) <- "UTF-8"
works. However, the iconv() method should be safer.
Duncan Murdoch
More information about the R-SIG-Mac
mailing list