2012-09-10 3 views
3

나는 몇 천 개의 이름을 가진 상점 이름 목록을 가지고 있는데, 그 중 일부는 비표준 미국 영어 문자로 인해 문제가 발생합니다. 예를 들어Python을 사용하여 CSV로 비표준 미국 영어 문자 및 기호 처리

, 내 입력 파일은 다음과 같습니다

store_name 
yéché 
Ázak 
ótndle 

내가 출력 파일이 실제로 같이 할 (내가는 GoogleDocs는 이런 일이 만들었다 고 생각, BTW) :이

store_name new_store_name 
yéché  yéché 
Ázak  Ãzak 
ótndle  ótndle 

비표준 미국 영어 문자를이 형식으로 변환하는 약 10 개의 규칙 만 있으므로 Excel을 통해 제어하고 Excel을 작성했습니다. 그러나 나는 미래에 계산적으로 이런 일을 할 수 있기를 바라고 있으며, 파이썬을 사용하여 이것을 수행하는 빠른 방법이 있는지 궁금해하고 있습니다. 명확하게하기 위해, 내가 뭘 원하는 만들 수 있습니다 :

é become é 
Á become Ãi 
+0

잠깐, 당신은 데이터를 왜곡하고 인코딩을 잘못하려고 노력하고 있습니까? – delnan

+0

이 방법으로 보는 인코딩이 변경되지 않았습니까? – Bruno

+0

UTF-8 저장하는 것이 더 잘 될 것이라고 생각합니다. 그러나 당신이 직면 한 문제는 MS Office의 CP 1252 인코딩과 가장 관련이 있습니다. 어쨌든 –

답변

2

당신은 decode and encode가 사용할 수 있습니다

print a 
péché 
Álak 
óundle 

print a.decode('latin9').encode('utf8'), 
péché 
Ãlak 
óundle 

나는 역을해야했다 ...

+0

고마워요! 이것은 dictReader/dictWriter와 위의 줄을 사용하여 for 루프를 작성하여 jjust를 사용하는 것은 매우 쉽습니다. 괜찮 으면 빠른 질문이 있습니다. 내 텍스트가 latin9인지 어떻게 알았습니까? 나는 사용자의 친절한 제안에 따라 http://www.joelonsoftware.com/articles/Unicode.html을 읽었지 만 텍스트가 latin9인지 어떻게 알았는지 궁금합니다. – user1590499

+0

다른 방법으로 이동하려면 사용했던 것이 었습니다. 내가 찾은 문서가 나올 때까지 문서에서 목록을 보았습니다. 내 프로젝트는 파이썬에서 rtf 파일을 만드는 것을 포함했다. 나는 '맹 글링 된'문자들을 알아 냈다. –

+0

고마워요. 대부분은 정상적으로 작동하지만 오류가 발생합니다. â € ™. 오류 : 파일 "C : \ Python27 \ lib \ encodings \ iso8859_15.py", 줄 12, 인코딩 return codecs.charmap_encode (input, errors, encoding_table) UnicodeEncodeError : 'charmap'코덱이 문자 U를 인코딩 할 수 없습니다. '\ u2019'(위치 0) : 문자는 user1590499

16

귀하의 문제는 MS Office 제품군의 CP-1252 "윈도우 유니 코드"인코딩 가능성이 높습니다. ASCII 또는 UTF로 읽으면 펑키 한 문자가 나타납니다.

  1. 강제 MS 오피스 다른 인코딩을 사용하는 :

    두 가지 일을 할 수있다. Office 프로그램 중 일부는이를 지원하고 일부는 지원하지 않습니다.

  2. MS Office가 저장 한 후에 파일을 다시 작성하십시오. 파이썬에서이 작업을 수행하려면

, 당신은이 같은 것을 사용할 수 있습니다

#!/usr/bin/python -u 
# -*- coding: utf-8 -*- 

## 
## cp1252 to UTF-8 decoder 
## 
## An expansion of the code found at http://effbot.org/zone/unicode-gremlins.htm 
## 



"""Converts stupid microsoft Windows 1252 characters to actual unicode, 
so that the rest of the world can still use it. 
""" 
import re 

## small collection: 
#~ cp1252 = { 
    #~ # from http://www.microsoft.com/typography/unicode/1252.htm 
    #~ u"\x80": u"\u20AC", # EURO SIGN 
    #~ u"\x82": u"\u201A", # SINGLE LOW-9 QUOTATION MARK 
    #~ u"\x83": u"\u0192", # LATIN SMALL LETTER F WITH HOOK 
    #~ u"\x84": u"\u201E", # DOUBLE LOW-9 QUOTATION MARK 
    #~ u"\x85": u"\u2026", # HORIZONTAL ELLIPSIS 
    #~ u"\x86": u"\u2020", # DAGGER 
    #~ u"\x87": u"\u2021", # DOUBLE DAGGER 
    #~ u"\x88": u"\u02C6", # MODIFIER LETTER CIRCUMFLEX ACCENT 
    #~ u"\x89": u"\u2030", # PER MILLE SIGN 
    #~ u"\x8A": u"\u0160", # LATIN CAPITAL LETTER S WITH CARON 
    #~ u"\x8B": u"\u2039", # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 
    #~ u"\x8C": u"\u0152", # LATIN CAPITAL LIGATURE OE 
    #~ u"\x8E": u"\u017D", # LATIN CAPITAL LETTER Z WITH CARON 
    #~ u"\x91": u"\u2018", # LEFT SINGLE QUOTATION MARK 
    #~ u"\x92": u"\u2019", # RIGHT SINGLE QUOTATION MARK 
    #~ u"\x93": u"\u201C", # LEFT DOUBLE QUOTATION MARK 
    #~ u"\x94": u"\u201D", # RIGHT DOUBLE QUOTATION MARK 
    #~ u"\x95": u"\u2022", # BULLET 
    #~ u"\x96": u"\u2013", # EN DASH 
    #~ u"\x97": u"\u2014", # EM DASH 
    #~ u"\x98": u"\u02DC", # SMALL TILDE 
    #~ u"\x99": u"\u2122", # TRADE MARK SIGN 
    #~ u"\x9A": u"\u0161", # LATIN SMALL LETTER S WITH CARON 
    #~ u"\x9B": u"\u203A", # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 
    #~ u"\x9C": u"\u0153", # LATIN SMALL LIGATURE OE 
    #~ u"\x9E": u"\u017E", # LATIN SMALL LETTER Z WITH CARON 
    #~ u"\x9F": u"\u0178", # LATIN CAPITAL LETTER Y WITH DIAERESIS 
#~ } 


## bigger collection: 
cp1252 = { 

    u"\x80": u"\u20AC", #   e282ac 
    u"\x81": u"\uFFFD", # ` ? efbfbd 
    u"\x82": u"\u201A", #     e2809a 
    u"\x83": u"\u0192", # à à c692 
    u"\x84": u"\u201E", # Ġ Ġ e2809e 
    u"\x85": u"\u2026", # Š Š e280a6 
    u"\x86": u"\u2020", # Ơ Ơ e280a0 
    u"\x87": u"\u2021", # Ǡ Ǡ e280a1 
    u"\x88": u"\u02C6", # Ƞ Ƞ cb86 
    u"\x89": u"\u2030", # ɠ ɠ e280b0 
    u"\x8a": u"\u0160", # ʠ ʠ c5a0 
    u"\x8b": u"\u2039", # ˠ ˠ e280b9 
    u"\x8c": u"\u0152", # ̠ ̠ c592 
    u"\x8d": u"\uFFFD", # ͠ ? efbfbd 
    u"\x8e": u"\u017D", # Π Π c5bd 
    u"\x8f": u"\uFFFD", # Ϡ ? efbfbd 
    u"\x90": u"\uFFFD", # Р ? efbfbd 
    u"\x91": u"\u2018", # Ѡ Ѡ e28098 
    u"\x92": u"\u2019", # Ҡ Ҡ e28099 
    u"\x93": u"\u201C", # Ӡ Ӡ e2809c 
    u"\x94": u"\u201D", # Ԡ Ԡ e2809d 
    u"\x95": u"\u2022", # ՠ ՠ e280a2 
    u"\x96": u"\u2013", # ֠ ֠ e28093 
    u"\x97": u"\u2014", # נ נ e28094 
    u"\x98": u"\u02DC", # ؠ ؠ cb9c 
    u"\x99": u"\u2122", # ٠ ٠ e284a2 
    u"\x9a": u"\u0161", # ڠ ڠ c5a1 
    u"\x9b": u"\u203A", # ۠ ۠ e280ba 
    u"\x9c": u"\u0153", # ܠ ܠ c593 
    u"\x9d": u"\uFFFD", # ݠ ? efbfbd 
    u"\x9e": u"\u017E", # ޠ ޠ c5be 
    u"\x9f": u"\u0178", # ߠ ߠ c5b8 
    u"\xa0": u"\u00A0", #    c2a0 
    u"\xa1": u"\u00A1", # ` ` c2a1 
    u"\xa2": u"\u00A2", #     c2a2 
    u"\xa3": u"\u00A3", # à à c2a3 
    u"\xa4": u"\u00A4", # Ġ Ġ c2a4 
    u"\xa5": u"\u00A5", # Š Š c2a5 
    u"\xa6": u"\u00A6", # Ơ Ơ c2a6 
    u"\xa7": u"\u00A7", # Ǡ Ǡ c2a7 
    u"\xa8": u"\u00A8", # Ƞ Ƞ c2a8 
    u"\xa9": u"\u00A9", # ɠ ɠ c2a9 
    u"\xaa": u"\u00AA", # ʠ ʠ c2aa 
    u"\xab": u"\u00AB", # ˠ ˠ c2ab 
    u"\xac": u"\u00AC", # ̠ ̠ c2ac 
    u"\xad": u"\u00AD", # ͠ ͠ c2ad 
    u"\xae": u"\u00AE", # Π Π c2ae 
    u"\xaf": u"\u00AF", # Ϡ Ϡ c2af 
    u"\xb0": u"\u00B0", # Р Р c2b0 
    u"\xb1": u"\u00B1", # Ѡ Ѡ c2b1 
    u"\xb2": u"\u00B2", # Ҡ Ҡ c2b2 
    u"\xb3": u"\u00B3", # Ӡ Ӡ c2b3 
    u"\xb4": u"\u00B4", # Ԡ Ԡ c2b4 
    u"\xb5": u"\u00B5", # ՠ ՠ c2b5 
    u"\xb6": u"\u00B6", # ֠ ֠ c2b6 
    u"\xb7": u"\u00B7", # נ נ c2b7 
    u"\xb8": u"\u00B8", # ؠ ؠ c2b8 
    u"\xb9": u"\u00B9", # ٠ ٠ c2b9 
    u"\xba": u"\u00BA", # ڠ ڠ c2ba 
    u"\xbb": u"\u00BB", # ۠ ۠ c2bb 
    u"\xbc": u"\u00BC", # ܠ ܠ c2bc 
    u"\xbd": u"\u00BD", # ݠ ݠ c2bd 
    u"\xbe": u"\u00BE", # ޠ ޠ c2be 
    u"\xbf": u"\u00BF", # ߠ ߠ c2bf 
    u"\xc0": u"\u00C0", #   c380 
    u"\xc1": u"\u00C1", # ` ` c381 
    u"\xc2": u"\u00C2", #     c382 
    u"\xc3": u"\u00C3", # à à c383 
    u"\xc4": u"\u00C4", # Ġ Ġ c384 
    u"\xc5": u"\u00C5", # Š Š c385 
    u"\xc6": u"\u00C6", # Ơ Ơ c386 
    u"\xc7": u"\u00C7", # Ǡ Ǡ c387 
    u"\xc8": u"\u00C8", # Ƞ Ƞ c388 
    u"\xc9": u"\u00C9", # ɠ ɠ c389 
    u"\xca": u"\u00CA", # ʠ ʠ c38a 
    u"\xcb": u"\u00CB", # ˠ ˠ c38b 
    u"\xcc": u"\u00CC", # ̠ ̠ c38c 
    u"\xcd": u"\u00CD", # ͠ ͠ c38d 
    u"\xce": u"\u00CE", # Π Π c38e 
    u"\xcf": u"\u00CF", # Ϡ Ϡ c38f 
    u"\xd0": u"\u00D0", # Р Р c390 
    u"\xd1": u"\u00D1", # Ѡ Ѡ c391 
    u"\xd2": u"\u00D2", # Ҡ Ҡ c392 
    u"\xd3": u"\u00D3", # Ӡ Ӡ c393 
    u"\xd4": u"\u00D4", # Ԡ Ԡ c394 
    u"\xd5": u"\u00D5", # ՠ ՠ c395 
    u"\xd6": u"\u00D6", # ֠ ֠ c396 
    u"\xd7": u"\u00D7", # נ נ c397 
    u"\xd8": u"\u00D8", # ؠ ؠ c398 
    u"\xd9": u"\u00D9", # ٠ ٠ c399 
    u"\xda": u"\u00DA", # ڠ ڠ c39a 
    u"\xdb": u"\u00DB", # ۠ ۠ c39b 
    u"\xdc": u"\u00DC", # ܠ ܠ c39c 
    u"\xdd": u"\u00DD", # ݠ ݠ c39d 
    u"\xde": u"\u00DE", # ޠ ޠ c39e 
    u"\xdf": u"\u00DF", # ߠ ߠ c39f 
    u"\xe0": u"\u00E0", # ࠠ ࠠ c3a0 
    u"\xe1": u"\u00E1", # ᠠ ᠠ c3a1 
    u"\xe2": u"\u00E2", # ⠠ ⠠ c3a2 
    u"\xe3": u"\u00E3", # 㠠 㠠 c3a3 
    u"\xe4": u"\u00E4", # 䠠 䠠 c3a4 
    u"\xe5": u"\u00E5", # 堠 堠 c3a5 
    u"\xe6": u"\u00E6", # 栠 栠 c3a6 
    u"\xe7": u"\u00E7", # 砠 砠 c3a7 
    u"\xe8": u"\u00E8", # 蠠 蠠 c3a8 
    u"\xe9": u"\u00E9", # 頠 頠 c3a9 
    u"\xea": u"\u00EA", # ꠠ ꠠ c3aa 
    u"\xeb": u"\u00EB", # 렠 렠 c3ab 
    u"\xec": u"\u00EC", # 젠 젠 c3ac 
    u"\xed": u"\u00ED", # �� �� c3ad 
    u"\xee": u"\u00EE", #   c3ae 
    u"\xef": u"\u00EF", #   c3af 
    u"\xf0": u"\u00F0", #  c3b0 
    u"\xf1": u"\u00F1", #  c3b1 
    u"\xf2": u"\u00F2", #  c3b2 
    u"\xf3": u"\u00F3", #  c3b3 
    u"\xf4": u"\u00F4", # ���� ���� c3b4 
    u"\xf5": u"\u00F5", # ���� ���� c3b5 
    u"\xf6": u"\u00F6", # ���� ���� c3b6 
    u"\xf7": u"\u00F7", # ���� ���� c3b7 
    u"\xf8": u"\u00F8", #  c3b8 
    u"\xf9": u"\u00F9", #  c3b9 
    u"\xfa": u"\u00FA", #  c3ba 
    u"\xfb": u"\u00FB", #  c3bb 
    u"\xfc": u"\u00FC", # ���� ���� c3bc 
    u"\xfd": u"\u00FD", # ���� ���� c3bd 
    u"\xfe": u"\u00FE", # ���� ���� c3be 
    u"\xff": u"\u00FF", # ���� ���� c3bf 

} 



def killgremlins(text): 
    # map cp1252 gremlins to real unicode characters 
    if re.search(u"[\x80-\xff]", text): 
     def fixup(m): 
      s = m.group(0) 
      return cp1252.get(s, s) 
     if isinstance(text, type("")): 
      # make sure we have a unicode string 
      text = unicode(text, "iso-8859-1") 
     text = re.sub(u"[\x80-\xff]", fixup, text) 
    return text 
+0

감사합니다! 필자는 실제로 XML 문서를 인코딩 할 때 필자의 머리를 때리고 파서에로드하고 태그를 모두 가져와야했습니다.나머지 문서의 무결성을 유지하는 데 신경 쓰지 않았습니다. 당신의 킬그림린은 완벽했습니다 !! –

관련 문제