Так что я использую 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], без специальных символов или что-нибудь удаленно другое.