2017-08-07 2 views
2

ich nur eine Datei mit einem Byte pro Zeichen schreiben wollen, ist es notwendig ist, weil eine Bank diese Tickets zu generieren machen ...8-Bit codierte Datei schreiben?

Mein Code ist:

arquivo = os.path.join(request.folder,"uploads", "teste.txt") 
texto = '01REMESSA01COBRANÇA  3007 ...'.decode("windows-1252") 
text_file = open(arquivo, "w") 
texto = texto.encode('ISO8859-1','ignore') 
text_file.write(texto) 
text_file.close()` 

Es erzeugt ‚?‘ Figuren.

+0

Woher wissen Sie, dass es sich um "?" Figuren? Sind Sie sicher, dass Sie Ihre Ausgabedatei in 'ISO8859-1' Kodierung betrachten? –

+0

Dies ist die Ausgabe mit encode 'mbcs' '01REMESSA01COBRANÃ? A ......' –

Antwort

0

Sie codieren Ihre Zeichenfolge zweimal, beide sind nicht erforderlich. Der feste Code wie folgt aussieht:

texto = '01REMESSA01COBRAN\N{LATIN CAPITAL LETTER C WITH CEDILLA}A ...' 
with open(arquivo, 'w', encoding='ISO-8859-1') as text_file: 
    text_file.write(texto) 

Ich gehe davon aus Sie verwenden Python3 weil Ihre ursprüngliche Zeichenfolge eine wörtliche Ç darin hat, die nicht in Python2 erlaubt würde. Alle Zeichenfolgen in Python3 sind Unicode, es sei denn, sie haben ein spezielles Präfix (z. B. b'these are octets'). Im Allgemeinen sollten Sie so lange wie möglich in Unicode bleiben, bis Sie eine Byte-Datei schreiben müssen.

Um die Codierung so spät wie möglich zu verzögern, ermöglicht open eine encoding= Option. Ich mag, dass ist die Codierung der Datei so, wenn Sie lesen oder schreiben, es tut nur das Richtige. Dies ermöglicht es uns,

# confirm we read what we meant 
print(open(arquivo, encoding='latin-1').read()) 

hinzuzufügen, was einfach funktioniert. Beachten Sie, 'ISO-8859-1' und 'latin-1' sind die gleiche Codierung in Python; ähnlich \N{CAPITAL...} und 'Ç' sind auch identisch, ersteres ist nur viel mehr zum Beispiel Zwecke sichtbar.

Ich konsultierte die Python Unicode HOWTO, um sicherzustellen, dass ich mich richtig erinnerte. Ich empfehle Ihnen, es zu lesen. Aus Gründen, die von Nick Coghalans "Processing Text Files in Python 3" erklärt werden, sollten Sie wahrscheinlich cp1252 vergessen.

+0

Ich vergaß, ich benutze Python 2 .. weil mein System alte Version von CentOS und py2 laufen .. richtig, ich will Speichern Sie die TXT-Datei in ANSI-Codec, mit Windows-Break-Linie, weil meine Bank nur dies erlauben .. danke an alle –

+0

Ich muss die Datei mit Codierung im ANSI-Standard von Windows zu generieren, weil Gesicht Zeichen nur ein Byte belegen muss .. wie wenn eine Datei mit Notizblock .. wenn ich die gleiche Datei mit der zitierten Zeichenfolge, von Notepad generieren, funktioniert es gut für die API der Bank .. –

Verwandte Themen