Подтвердить что ты не робот

Как загрузить исходный().R файл с использованием кодировки UTF-8?

При копировании и вклеивании непосредственно в R работает нормально:

> character_test <- function() print("R同时也被称为GNU S是一个强烈的功能性语言和环境,探索统计数据集,使许多从自定义数据图形显示...")
> character_test()
[1] "R同时也被称为GNU S是一个强烈的功能性语言和环境,探索统计数据集,使许多从自定义数据图形显示..."

Однако, если я создаю файл с именем character_test.R, содержащий код EXACT SAME, сохранить его в кодировке UTF-8 (чтобы сохранить специальные китайские символы), тогда, когда я источник (например, ) он в R, я получаю следующую ошибку:

> source(file="C:\\Users\\Tony\\Desktop\\character_test.R", encoding = "UTF-8")
Error in source(file = "C:\\Users\\Tony\\Desktop\\character_test.R", encoding = "utf-8") : 
  C:\Users\Tony\Desktop\character_test.R:3:0: unexpected end of input
1: character.test <- function() print("R
2: 
  ^
In addition: Warning message:
In source(file = "C:\\Users\\Tony\\Desktop\\character_test.R", encoding = "UTF-8") :
  invalid input found on input connection 'C:\Users\Tony\Desktop\character_test.R'

Любая помощь, которую вы можете предложить в решении и помогающая мне понять, что здесь происходит, будет высоко оценена.

> sessionInfo() # Windows 7 Pro x64
R version 2.12.1 (2010-12-16)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252 
[2] LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods  
[7] base     

loaded via a namespace (and not attached):
[1] tools_2.12.1

и

> l10n_info()
$MBCS
[1] FALSE

$`UTF-8`
[1] FALSE

$`Latin-1`
[1] TRUE

$codepage
[1] 1252
4b9b3361

Ответ 1

Мы много говорили об этом в комментариях к моему предыдущему сообщению, но я не хочу, чтобы это затерялось на странице 3 комментариев: вам нужно установить локаль, она работает с обоими входами с R-консоли ( см. скриншот в комментариях), а также со входом из файла см. этот снимок экрана:

Файл "myfile.r" содержит:

russian <- function() print ("Американские с...");

Консоль содержит:

source("myfile.r", encoding="utf-8")
> Error in source(".....
Sys.setlocale("LC_CTYPE","ru")
> [1] "Russian_Russia.1251"
russian()
[1] "Американские с..."

Обратите внимание, что файл не работает и указывает на тот же символ, что и исходная ошибка плаката (после "R" ). Я не могу сделать это с китайцами, потому что мне нужно будет установить "Microsoft Pinyin IME 3.0", но процесс тот же, вы просто заменяете языковой стандарт на "китайский" (именование немного противоречиво, обратитесь к документации).

Ответ 2

В R/Windows source возникают проблемы с любыми символами UTF-8, которые не могут быть представлены в текущей локали (или кодовая страница ANSI в Windows-talk). И, к сожалению, Windows не имеет UTF-8, доступного в виде кодовой страницы ANSI. У Windows есть техническое ограничение, что кодовые страницы ANSI могут быть только кодировками с одним или двумя байтами на каждый символ, а не с кодировками с байтами, такими как UTF- 8.

Это не кажется фундаментальной, неразрешимой проблемой - там что-то не так с функцией source. Вы можете получить 90% пути, выполнив это вместо этого:

eval(parse(filename, encoding="UTF-8"))

Это будет работать почти так же, как source() с аргументами по умолчанию, но не позволит вам делать echo = T, eval.print = T и т.д.

Ответ 3

Я думаю, что проблема связана с R. Я могу с удовольствием использовать файлы UTF-8 или файлы UCS-2LE со многими не-ASCII-символами. Но некоторые символы приводят к сбою. Например, следующие

danish <- function() print("Skønt H. C. Andersens barndomsomgivelser var meget fattige, blev de i hans rige fantasi solbeskinnede.")
croatian <- function() print("Dodigović. Kako se Vi zovete?")
new_testament <- function() print("Ne provizu al vi trezorojn sur la tero, kie tineo kaj rusto konsumas, kaj jie ŝtelistoj trafosas kaj ŝtelas; sed provizu al vi trezoron en la ĉielo")
russian <- function() print ("Американские суда находятся в международных водах. Япония выразила серьезное беспокойство советскими действиями.")

отлично подходит как для UTF-8, так и для UCS-2LE без русской линии. Но если это включено, то это терпит неудачу. Я указываю пальцем на R. Ваш китайский текст также кажется слишком сложным для R в Windows.

Локаль кажется здесь неактуальной. Это просто файл, вы скажете, что такое кодирование файла, почему ваш язык имеет значение?

Ответ 4

Для меня (по окнам) я:

source.utf8 <- function(f) {
    l <- readLines(f, encoding="UTF-8")
    eval(parse(text=l),envir=.GlobalEnv)
}

Он отлично работает.

Ответ 5

В окнах, когда вы копируете в строку кодировки unicode или utf-8 в текстовый элемент управления, который настроен на однобайтовый ввод (ascii... в зависимости от локали), неизвестные байты будут заменены на вопросительные знаки. Если я беру первые 4 символа вашей строки и скопирую их в, например, Блокнот, а затем сохраните его, файл будет в шестнадцатеричном формате:

52 3F 3F 3F 3F

вам нужно найти редактор, который вы можете установить в utf-8 перед копировать в него текст, затем сохраненный файл (из ваших первых 4-х символов) будет выглядеть следующим образом:

52 E5 90 8C E6 97 B6 E4 B9 9F E8 A2 AB

Затем это будет признано действительным utf-8 с помощью [R].

Я использовал "Notepad2" для этого, но я уверен, что их еще много.

Ответ 6

Я сталкиваюсь с этой проблемой при попытке создать файл .R, содержащий некоторые китайские символы. В моем случае я обнаружил, что просто установить "LC_CTYPE" на "китайский" недостаточно. Но настройка "LC_ALL" на "китайский" работает хорошо.

Обратите внимание, что этого недостаточно для правильного кодирования при чтении или записи текстового файла в Rstudio (или R?) с не-ASCII. Также выполняется установка языкового стандарта.

PS. команда Sys.setlocale(category = "LC_CTYPE", locale = "chinese" ). Пожалуйста, замените значение локали соответственно.