Vladimir Shevyakov
Vladimir Shevyakov

Reputation: 2821

How to avoid automatic ASCII encoding on Python 3?

I'm working on an encryption program in Python 3 right now, but I am having some problems with ASCII encoding. For example, if I want to write a text file from python that rights Ϩ (which is chr(1000)) into a text file, and I do:

a_file = open('chr_ord.txt', 'w')
a_file.write(chr(1000))
a_file.close()

I get:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ...
  File "C:/Comp_Sci/Coding/printRAW.py", line 3, in <module>
    a_file.write(chr(1000))
  File "C:\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u03e8' in position 0: character maps to <undefined>

And if I try:

a_file = open('chr_ord.txt', 'w')
a_file.write(ascii(chr(1000)))
a_file.close()

Python doesn't crash, but the text file contains '\u03e8' instead of the desired Ϩ

Is there any way I can go around this?

Upvotes: 0

Views: 323

Answers (1)

roeland
roeland

Reputation: 5741

The Python 3 way is to use the encoding parameter when opening the file. Eg. encode the file as UTF-8

a_file = open('chr_ord.txt', 'w', encoding='utf-8')

The default is your system ANSI code page, which doesn't contain the Ϩ character.

Upvotes: 3

Related Questions