2016-12-05 9 views
1

Gmail에서 내 보낸 .mbox 파일에서 표시된 보낸 사람 이름을 추출하고 tm.plugin.mail을 사용하여 읽었습니다. 특수 문자와 인코딩 사양 (=? UTF-8?)을 모두 포함하는 일부 이름은 "quoted-printable" 형식 (예 : =? UTF-8? Q? stern = 2Ede _-t = C3 = A4glich?). 이것을 UTF-8 또는 latin1로 인코딩 된 문자 벡터로 변환하고 싶습니다.따옴표 붙은 인쇄 가능한 문자열을 R으로 둘러보기

나는 성공없이 다른 인코딩 문제를 사용하는 것이 Encoding()iconv()을 시도 :

qp_encoded <- "=?UTF-8?Q?stern=2Ede_-_t=C3=A4glich?=" 

# List of available encodings 
iconvlist() 
# On my computer (OS X) there seems to be no encoding related to MIME 
# or quoted-printable 
# None of them give correct result 
for(encoding in iconvlist()){ 
print(iconv(qp_encoded, from = encoding, to = "UTF-8")) 
} 

# Accepted answer on other post (see below) 
Encoding(qp_encoded) 
Encoding(qp_encoded) <- "latin1" 
qp_encoded # No change in encoding 

이 같은 질문 here 한 대답은하지만, 대답은 Encoding()하고 아무튼에서 복사 한 예에 불과 op의 예제로 작업하지 마십시오. 가서 C와 함수 in PHPjavascript의 문제에 관한 몇 가지 다른 질문은,하지만 난에서 호출 또는 R.

편집을 내보낼 방법을 알아낼 수 없습니다 : 지금 파이썬을 사용하고 ryPython 패키지를 통해 quopri.decodestring()하지만 솔루션은 매우 효율적으로 보이지 않습니다.

library("rPython") 
python.assign("stringVector", qp_encoded) 
python.exec(c(
    "import quopri", 
    "result = []", 
    "for i in range(0, len(stringVector)):", 
    "\tresult.append(str(quopri.decodestring(stringVector[i], header=False)))" 
)) 
test <- python.get("result") 

quoted-printable을 변환하는 다른 R 함수/패키지가 있습니까? iconv()을 quoted-printable로 변환 할 수 있습니까?

답변

1

필자는 인용 가능한 인쇄 가능한 인코딩/디코딩을 위해 pkg를 제작할 생각이었습니다. 내가 (안 크랑에) 내 개인 R의 PKG이 디코더를 붙어했습니다, 지금은

qp_encoded <- "=?UTF-8?Q?stern=2Ede_-_t=C3=A4glich?=" 

stringi::stri_replace_all_fixed(qp_encoded, qp_before, qp_after, vectorize_all=FALSE) 

## "=?UTF-8?Q?stern.de_-_täglich?=" 

: : 이제

qp_before <- c("=00", "=01", "=02", "=03", "=04", "=05", "=06", "=07", "=08", "=09", "=0A", 
       "=0B", "=0C", "=0D", "=0E", "=0F", "=10", "=11", "=12", "=13", "=14", "=15", 
       "=16", "=17", "=18", "=19", "=1A", "=1B", "=1C", "=1D", "=1E", "=1F", "=20", 
       "=21", "=22", "=23", "=24", "=25", "=26", "=27", "=28", "=29", "=2A", "=2B", 
       "=2C", "=2D", "=2E", "=2F", "=30", "=31", "=32", "=33", "=34", "=35", "=36", 
       "=37", "=38", "=39", "=3A", "=3B", "=3C", "=3D", "=3E", "=3F", "=40", "=41", 
       "=42", "=43", "=44", "=45", "=46", "=47", "=48", "=49", "=4A", "=4B", "=4C", 
       "=4D", "=4E", "=4F", "=50", "=51", "=52", "=53", "=54", "=55", "=56", "=57", 
       "=58", "=59", "=5A", "=5B", "=5C", "=5D", "=5E", "=5F", "=60", "=61", "=62", 
       "=63", "=64", "=65", "=66", "=67", "=68", "=69", "=6A", "=6B", "=6C", "=6D", 
       "=6E", "=6F", "=70", "=71", "=72", "=73", "=74", "=75", "=76", "=77", "=78", 
       "=79", "=7A", "=7B", "=7C", "=7D", "=7E", "=7F", "=80", "=81", "=82", "=83", 
       "=84", "=85", "=86", "=87", "=88", "=89", "=8A", "=8B", "=8C", "=8D", "=8E", 
       "=8F", "=90", "=91", "=92", "=93", "=94", "=95", "=96", "=97", "=98", "=99", 
       "=9A", "=9B", "=9C", "=9D", "=9E", "=9F", "=A0", "=A1", "=A2", "=A3", "=A4", 
       "=A5", "=A6", "=A7", "=A8", "=A9", "=AA", "=AB", "=AC", "=AD", "=AE", "=AF", 
       "=B0", "=B1", "=B2", "=B3", "=B4", "=B5", "=B6", "=B7", "=B8", "=B9", "=BA", 
       "=BB", "=BC", "=BD", "=BE", "=BF", "=C0", "=C1", "=C2", "=C3", "=C4", "=C5", 
       "=C6", "=C7", "=C8", "=C9", "=CA", "=CB", "=CC", "=CD", "=CE", "=CF", "=D0", 
       "=D1", "=D2", "=D3", "=D4", "=D5", "=D6", "=D7", "=D8", "=D9", "=DA", "=DB", 
       "=DC", "=DD", "=DE", "=DF", "=E0", "=E1", "=E2", "=E3", "=E4", "=E5", "=E6", 
       "=E7", "=E8", "=E9", "=EA", "=EB", "=EC", "=ED", "=EE", "=EF", "=F0", "=F1", 
       "=F2", "=F3", "=F4", "=F5", "=F6", "=F7", "=F8", "=F9", "=FA", "=FB", "=FC", 
       "=FD", "=FE", "=FF", "=\r\n") 

qp_after <- c("", "\001", "\002", "\003", "\004", "\005", "\006", "\a", "\b", "\t", "\n", 
       "\v", "\f", "\r", "\016", "\017", "\020", "\021", "\022", "\023", "\024", 
       "\025", "\026", "\027", "\030", "\031", "\032", "\033", "\034", "\035", 
       "\036", "\037", " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", 
       ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", 
       ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", 
       "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", 
       "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", 
       "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", 
       "w", "x", "y", "z", "{", "|", "}", "~", "\177", "\x80", "\x81", "\x82", 
       "\x83", "\x84", "\x85", "\x86", "\x87", "\x88", "\x89", "\x8a", "\x8b", 
       "\x8c", "\x8d", "\x8e", "\x8f", "\x90", "\x91", "\x92", "\x93", "\x94", 
       "\x95", "\x96", "\x97", "\x98", "\x99", "\x9a", "\x9b", "\x9c", "\x9d", 
       "\x9e", "\x9f", "\xa0", "\xa1", "\xa2", "\xa3", "\xa4", "\xa5", "\xa6", 
       "\xa7", "\xa8", "\xa9", "\xaa", "\xab", "\xac", "\xad", "\xae", "\xaf", 
       "\xb0", "\xb1", "\xb2", "\xb3", "\xb4", "\xb5", "\xb6", "\xb7", "\xb8", 
       "\xb9", "\xba", "\xbb", "\xbc", "\xbd", "\xbe", "\xbf", "\xc0", "\xc1", 
       "\xc2", "\xc3", "\xc4", "\xc5", "\xc6", "\xc7", "\xc8", "\xc9", "\xca", 
       "\xcb", "\xcc", "\xcd", "\xce", "\xcf", "\xd0", "\xd1", "\xd2", "\xd3", 
       "\xd4", "\xd5", "\xd6", "\xd7", "\xd8", "\xd9", "\xda", "\xdb", "\xdc", 
       "\xdd", "\xde", "\xdf", "\xe0", "\xe1", "\xe2", "\xe3", "\xe4", "\xe5", 
       "\xe6", "\xe7", "\xe8", "\xe9", "\xea", "\xeb", "\xec", "\xed", "\xee", 
       "\xef", "\xf0", "\xf1", "\xf2", "\xf3", "\xf4", "\xf5", "\xf6", "\xf7", 
       "\xf8", "\xf9", "\xfa", "\xfb", "\xfc", "\xfd", "\xfe", "\xff", "") 

가 디코딩이 꽤 빠른 조회 테이블 버전입니다

devtools::install_github("hrbrmstr/hrbrmisc") 

hrbrmisc::qp_decode(qp_encoded) 
+0

처음 부분 =? UTF-8? Q? 그리고 끝? 이메일 헤더에 대한 MIME 인코딩의 일부로 보인다. 지금까지 정규식으로 제거했습니다. 사이에있는 문자열의 인코딩을 지정한다고 가정하면 올바 릅니까? UTF-8 – joha

+1

이 아닌 인용 부호로 된 인쇄 가능 인코딩과는 별개의 견고성에 대해 우려하고 있습니다. [RFC 1342] (https://tools.ietf.org/html/rfc1342)의 6 페이지를 참고하면 해당 사양을 처리하는 방법을 볼 수 있습니다. 헤더에 텍스트 인코딩을 지정하는 해킹 방법입니다. – hrbrmstr