Кодирование внутри фрагментов приводит к отсутствию символов, несмотря на UTF-8.

У меня есть файл Rmd, закодированный с помощью UTF-8, но когда я связываю файл, R вычисляет встроенное содержимое, а в чанке отсутствуют некоторые чешские символы. Все нормально, когда я набираю текст вне кусков. Читая тот же текст из файла, я могу правильно вывести встроенный вывод, но не при использовании печати (print или cat) из фрагмента. Я полностью запутался в ситуации, особенно в поведении cat.

Я на Windows. Проверка кодировки в консоли возвращает UTF-8. Локаль установлен на English_United Kingdom.1252.

---
title: "test"
output: html_document
---
```{r}
txt <- "Čeština funguje"
print(Encoding(txt))
print(txt)      # prints incorrectly
```

Čeština funguje # prints correctly
`r txt`         # prints incorrectly

```{r}
cat(txt)        # prints incorrectly
```

```{r, results='asis'}
line <- readLines("line", encoding = "UTF-8")
print(Encoding(line))
print(line) # prints incorrectly
cat(line)   # prints incorrectly
```

`r line`    # prints correctly!

P.S. Я знаю, что было много сказано о R и кодировании в Windows, но, несмотря на мои обширные поиски, я не могу найти решение и не полностью понимаю это поведение. Я предполагаю, что мне нужно установить какую-то локаль, но мои усилия до сих пор были напрасны.

Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
0
224
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

До того, как R поддерживает UTF-8 изначально в Windows, обычно вам нужно установить локаль для определенного языка, если вы хотите использовать многобайтовые символы из этого языка, например, вам нужно использовать чешскую локаль вместо английского, если вы хотите правильно print()/cat() чешские символы. Языковой стандарт должен быть установлен до того, как произойдет вязание, например, вы можете установить его в своем ~/.Rprofile:

Sys.setlocale(, 'Czech')

Я никогда раньше не использовал чешский язык и не уверен, что 'Czech' является правильным значением, но это идея (у меня был успех с другими языками раньше).

Большое спасибо! После того, как вы написали это, я смог правильно погуглить и исправить с помощью кода из этого ответа (stackoverflow.com/questions/46946483/czech-encoding-in-r). Не понимаю, почему я не нашел это раньше :(

Lukáš Hejtmánek 22.12.2020 12:30

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