writeLines () символьная переменная кодировка? - PullRequest
0 голосов
/ 08 апреля 2020

Так что я использую R для создания входного файла для другой программы, используя writeLines (). Перед этим я объявляю переменную, которую я хочу записать в файл

log_computer=strsplit(basename(strsplit(log_files[u],'\\/')[[1]][7]),'\\.')[[1]][1]
#log_computer=tools::file_path_sans_ext(strsplit(log_files[u],'\\/')[[1]][7]) #no difference

writeLines(paste0('Blah Blah Blah',log_computer,'More Blah Blah Blah')

Все это работает без проблем. Входной файл написан правильно. Проблема в том, что программа other / backend читает этот файл, не распознает символ log_computer, игнорирует его и вызывает проблемы. Благодаря счастливой случайности я обнаружил, что эти «хаки» заставляют бэкэнд-программу правильно распознавать символьную переменную во входном файле:

writeLines(paste0('Blah Blah Blah',tolower(log_computer),'More Blah Blah Blah') #this works  
writeLines(paste0('Blah Blah Blah',gsub('Y4','Y',log_computer),'More Blah Blah Blah') #also works

Я потратил целый день, балуясь с кодировкой, используя практически все, что могу найти, iconv, stringi::stri_enc_toutf8, enc2native, enc2utf8. (Понятно, что кодировка всегда «неизвестна» после объявления переменной длины 1 log_computer). Я попытался использоватьBytes = T. Ничего не работает Ничто не отличается от кодировки, которую я могу заставить R сказать мне. Что мне не хватает? Это обычный английский sh [AZ], без специальных символов или что-нибудь удаленно другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...