R: cat () выводит Unicode последовательно на консоль, но не в файл - PullRequest
0 голосов
/ 29 ноября 2018

Фон

У меня есть функция, которая принимает в качестве входных данных Tibble (или data.frame, не имеет значения) и создает пользовательскую таблицу Markdown в текстовом файле.Данные поступают из RESTful API (AirTable, если вы должны знать);кодируется UTF-8;уже содержит символы Юникода (например, ¥ и €);и обрабатывается в Tibble через функции в пакетах httr, jsonlite и tibble.Через функцию base Encoding я подтвердил, что данные в столбцах Tibble имеют формат UTF-8.

Редактировать: Я использую R 3.5.1 в Windows 10.

Проблема

Когда я использую cat для печати данных в Tibble в файл, он работает как положено.Символы валюты и любые другие сумасшедшие вещи в тексте печатаются просто отлично.(Хотя, что любопытно, результирующая кодировка файла выглядит как ANSI.)

Однако ... при создании таблицы Markdown я пытаюсь перевести логический столбец как пустую строку, когда FALSE и как☑ символ, когда TRUE.Этот символ отсутствует в данных, поэтому мне нужно написать его там с помощью функции.Тем не менее, он всегда буквально печатает в файл в виде строки <U+2611>.

. Любопытно, что если я скажу cat, чтобы печатать на консоли вместо файла, ничего больше не меняя .... оно работает.Я сбит с толку.

Что я пробовал

Сначала я попытался использовать функцию intToUtf8, передавая десятичное представление символа (9745).Я попытался использовать это непосредственно в операторе cat, я также сначала попытался сохранить результат в переменной, а затем передать его в оператор cat.

Затем я попытался просто напрямую скопировать и вставитьсимвол в строку в файле R.Как и выше, я попытался передать его прямо и косвенно через переменную.

Наконец, я прочитал это: Вывести строку символов Unicode в R и использовал экранированную последовательность Unicode для вставки символа.Опять же, я попробовал два способа - прямо в операторе cat и косвенно как переменную - но результат тот же.

(я не пробовал пакет stringi, как предложено в ответе выше,но у меня не совсем та же проблема, что и у человека, так что я не уверен, что будет лучше.)

...