Изменить кодировку ввода / вывода консоли R в Eclipse + StatET

Я пытаюсь заставить консоль Eclipse работать с польскими (или любыми другими неанглийскими) символами, независимо от того, закодированы ли они в кодировке ANSI или UTF-8. Похоже, что в Windows R может кодировать только с ANSI, в то время как консоль Eclipse использует UTF-8 или ISO-8859-1.

Пытаясь использовать ANSI CP-1250 (польская кодировка по умолчанию для Windows), я:

  • закодировать файл сценария R как ANSI CP-1250
  • задать свойства Eclipse, в том числе тип содержимого "R Script File" (в общем -> Типы содержимого -> текст), "Кодировка текстового файла" (в общем -> Рабочая область), кодировка консоли (в "Run Configurations" -> "R Console"). "->" Общий ", как cp1250
  • установить свойства JVM в eclipse.ini, добавив строки: "-Dclient.encoding.override=cp1250", "-Dfile.encoding=cp1250"

без эффекта вообще. Как я могу заставить Eclipse кодировать и отображать в локали R?

Точно такое же поведение сохраняется, когда все эти опции установлены на "UTF-8" вместо "CP-1250". Обратите внимание, что я не могу установить для языка R значение UTF-8 в Windows. Стоит отметить, что Rstudio, Rgui и Rterm не создают проблем с кодировкой CP-1250 по умолчанию, строки отображаются правильно.

Выполненный скрипт:

print(Sys.getlocale())
Sys.setenv(LANG = 'pl_PL.cp1250')

x <- 'ąęłóżść'
message('Printing variable'); print(x); print(charToRaw(x))

Выход 1: "Выполнить через источник" -> строка, закодированная в ANSI CP1250, но напечатанная как ISO-8859-1

> source("C:/mjktfw/pit/workspace/test_encoding/run3.R", echo=FALSE, encoding="cp1250")
[1] "LC_COLLATE=Polish_Poland.1250;LC_CTYPE=Polish_Poland.1250;LC_MONETARY=Polish_Poland.1250;LC_NUMERIC=C;LC_TIME=Polish_Poland.1250"
Printing variable
[1] "¹ê³ó
[1] b9 ea b3 f3 bf 9c e6

Выход 2: "Выполнить через отправку напрямую" -> строка, закодированная с помощью UTF-8, напечатанная правильно

> print(Sys.getlocale())
[1] "LC_COLLATE=Polish_Poland.1250;LC_CTYPE=Polish_Poland.1250;LC_MONETARY=Polish_Poland.1250;LC_NUMERIC=C;LC_TIME=Polish_Poland.1250"
> Sys.setenv(LANG = 'pl_PL.cp1250')
> 
> x <- 'ąęłóżść'
> message('Printing variable'); print(x); print(charToRaw(x))
Printing variable
[1] "ąęłóżść"
 [1] c4 85 c4 99 c5 82 c3 b3 c5 bc c5 9b c4 87

Выход 3: копирование-вставка в консоль: -> строка, закодированная с помощью UTF-8, напечатанная правильно

> print(Sys.getlocale())
[1] "LC_COLLATE=Polish_Poland.1250;LC_CTYPE=Polish_Poland.1250;LC_MONETARY=Polish_Poland.1250;LC_NUMERIC=C;LC_TIME=Polish_Poland.1250"
> Sys.setenv(LANG = 'pl_PL.cp1250')
> 
> x <- 'ąęłóżść'
> message('Printing variable'); print(x); print(charToRaw(x))
Printing variable
[1] "ąęłóżść"
 [1] c4 85 c4 99 c5 82 c3 b3 c5 bc c5 9b c4 87

Вывод 4: ярлык "Выполнить всю команду в R" -> строка, закодированная как ANSI CP1250, но напечатанная как незашифрованные кодовые точки Unicode

> print(Sys.getlocale())
[1] "LC_COLLATE=Polish_Poland.1250;LC_CTYPE=Polish_Poland.1250;LC_MONETARY=Polish_Poland.1250;LC_NUMERIC=C;LC_TIME=Polish_Poland.1250"
> Sys.setenv(LANG = 'pl_PL.cp1250')
> x <- 'ąęłóżść'
> message('Printing variable')
Printing variable
> print(x)
[1] "<U+00B9><ea><U+00B3><f3><U+00BF><U+009C><e6>"
> print(charToRaw(x))
[1] b9 ea b3 f3 bf 9c e6

редактировать

После некоторого повторения выясняется, что вышеупомянутые случаи являются результатом различного "сырого" кодирования и Encoding()<- параметры строки. Вывод ниже сравнивает поведение R/Rstudio и Eclipse/StatET:

Затмение

> # UTF-8 encoded string
> char <- rawToChar(as.raw(c(0xea, 0xb3, 0x9c)))
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: 곜"
[1] "Encoding: unknown | Raw: ea b3 9c"
> 
> Encoding(char) <- 'UTF-8'
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: <U+ACDC>"
[1] "Encoding: UTF-8 | Raw: ea b3 9c"
> 
> # ANSI encoded string
> char <- rawToChar(as.raw(c(0xc4, 0x99, 0xc5, 0x82, 0xc5, 0x9b)))
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: ęłś"
[1] "Encoding: unknown | Raw: c4 99 c5 82 c5 9b"
> 
> Encoding(char) <- 'UTF-8'
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: 곜"
[1] "Encoding: UTF-8 | Raw: c4 99 c5 82 c5 9b"

Rstudio

> # UTF-8 encoded string
> char <- rawToChar(as.raw(c(0xea, 0xb3, 0x9c)))
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: ęłś"
[1] "Encoding: unknown | Raw: ea b3 9c"
> 
> Encoding(char) <- 'UTF-8'
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: 곜"
[1] "Encoding: UTF-8 | Raw: ea b3 9c"
> 
> # ANSI encoded string
> char <- rawToChar(as.raw(c(0xc4, 0x99, 0xc5, 0x82, 0xc5, 0x9b)))
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: ęłś"
[1] "Encoding: unknown | Raw: c4 99 c5 82 c5 9b"
> 
> Encoding(char) <- 'UTF-8'
> sprintf('String: %s', char); sprintf('Encoding: %s | Raw: %s', Encoding(char), paste(charToRaw(char), collapse = ' '))
[1] "String: ęłś"
[1] "Encoding: UTF-8 | Raw: c4 99 c5 82 c5 9b"

0 ответов

Другие вопросы по тегам