2016-01-08 5 views
4

У меня есть поврежденный файл, где специальные символы Windows заменены их эквивалентами UTF-8. Я попытался написать функцию, которая способна заменить специальные символы, основанные на this table:Замена специальных символов из разных кодировок в r

utf2win <- function(x){ 
soll <- c("À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", 
    "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", 
    "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", 
    "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", 
    "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ" 
) 

ist <- c("À", "Ã", "Â", "Ã", "Ä", "Ã…", "Æ", "Ç", "È", "É", 
    "Ê", "Ë", "ÃŒ", "Ã", "ÃŽ", "Ã", "Ã", "Ñ", "Ã’", "Ó", "Ô", 
    "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ãœ", "Ã", "Þ", "ß", 
    "Ã", "á", "â", "ã", "ä", "Ã¥", "æ", "ç", "è", "é", "ê", 
    "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", 
    "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ") 


    for(i in 1: length(ist)){ 
      x <- gsub(ist[i], soll[i], x) 
    } 
    return(x) 
} 

И теперь для испытания

a <- "Geidorf: Grabengürtel" 

utf2win(a) 

И ничего не происходит ... Я предполагаю, что проблема в том, что Символ «Ã» не признается вслух. У вас есть решение проблемы?

ответ

3

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

Я попытался iconv для примера строки

iconv(a, "UTF-8", "WINDOWS-1252") 
#[1] "Geidorf: Grabengürtel" 

И это работает, но вы правы, что-то с «А»

iconv("Geidorf: Grabengürtel Ã", "UTF-8", "WINDOWS-1252") 
#[1] NA 

Мы можем видеть, какие письма являются проблематичными:

ist[is.na(iconv(ist, "UTF-8", "WINDOWS-1252"))] 
[1] "Ã" "Ã" "Ã" "Ã" "Ã" "Ã" 

# corresponding characters 
paste(soll[is.na(iconv(ist, "UTF-8", "WINDOWS-1252"))]) 
[1] "Á" "Í" "Ï" "Ð" "Ý" "à" 

Сайт, на который вы ссылаетесь, имеет релевантность муравей page, который излагает то, что вопрос:

Кодирование Проблема: Двойной Mis-Конверсия

Симптом

С этой конкретной технологией двойного преобразования, большинство отображаемых символов правильно. Только символы со вторым байтом UTF-8 от 0x81, 0x8D, 0x8F, 0x90, 0x9D сбой. В Windows-1252 будут отображаться следующие символы с кодами Unicode: U + 00C1, U + 00CD, U + 00CF, U + 00D0 и U + 00DD . Если вы посмотрите на I18nQA Encoding Debug Table , вы можете видеть, что эти символы в UTF-8 имеют второй байт, заканчивающийся на одним из пунктов неназначенного кода Windows.

Á Ï Í Ð Ý


"а" другой случай. Вы сопоставили его с «Ã», когда он должен быть «Ã \ u00A0» или «Ã \ xA0» или «Ã» (обратите внимание, что пространство не является нормальным пространством, это неразрывное пространство). Итак, исправление того, что в ist заботится о одной букве.

Что касается других символов («Á», «Í», «Ï», «Ð» и «Ý»), то есть все они отображаются в «Ã» в ist, и вы будете никогда не сможете делать соответствующие замены, пока это правда.

+0

Отличный андер - спасибо! кроме того, вы указали на некоторые проблемы, когда не на моем пути («Á», «Í», «Ï», «ì» и «Ý»). Это кажется результатом преобразования таблицы в мою ссылку в Excel. – Seb

 Смежные вопросы

  • Нет связанных вопросов^_^