0

I'm trying to code a simple program in order to simulate a simple bus line with some station to exchange. I used 2 list for the bus stop and a dict for the line:bus-stop Here is the code

`def main():

    lineA = ["Stazione Autolinee","Via Romagnoli","Via E.Filiberto", \
            "Piazza del popolo" , "Via Cattaneo", "Via Pio VI", "P.Le Prampolini", \
            "Via dei Mille", "Via Villafranca","Via Romagnoli", "Viale Kennedy", \
            "Via Mosca","Via Bucarest","Via U.Zani","Via Kennedy","Via Bruxelles", \
            "Via Bachelet","Via Mazzocchi Alemanni","Via Sant'Agostino", "V.Le P.L. Nervi", \
            "Via Milano" , "Via Palermo" , "Via Mazzocchi Alemanni" , "Via Sant’Agostino", \
            "Via Del Lido" , "Via Garigliano" , "Via Pio VI" , "C.so della Repubblica", \
            "Piazza del Popolo" , "Via C. Battisti" , "Via E. Filiberto" , "Via Romagnoli", \
            "Stazione Autolinee"]
    lineB = ["Stazione Autolinee" , "Via Romagnoli" , "Via E. Filiberto" , "Piazza del Popolo", \
            "Via Diaz" , "V.Le Don Morosini" , "V.Le Mazzini" , "Viale dello Statuto" , \
            "Via Virgilio" , "Via Terenzio" , "V.Le Petrarca" , "Via dei Volsci" , "Via Don Torello" , \
            "Via S.Francesco D\'Assisi" , "Via Pantanaccio" , "Via Epitaffio" , "Via M. Terminillo" , \
            "Via G.S. d\' Italia" , "Via Pionieri della Bonifica" , "P.Le Carturan" , "Via Carturan" , \
            "Corso della Repubblica" , "Via C. Battisti" , "C.so Matteotti" , "Piazza del Popolo" , \
            "Corso Della Repubblica" , "Via C. Battisti" , "Via E. Filiberto" , "Stazione Autolinee"]
    diz = {"Line A":lineA, "Line B":lineB}
    for key in diz:
        for ele in diz[key]:
            print(key, ele)
`

and that's the output

Line A Stazione Autolinee
Line A Via Romagnoli
Line A Via E.Filiberto
Line A Piazza del popolo
Line A Via Cattaneo
Line A Via Pio VI
Line A P.Le Prampolini
Line A Via dei Mille
Line A Via Villafranca
Line A Via Romagnoli
Line A Viale Kennedy
Line A Via Mosca
Line A Via Bucarest
Line A Via U.Zani
Line A Via Kennedy
Line A Via Bruxelles
Line A Via Bachelet
Line A Via Mazzocchi Alemanni
Line A Via Sant'Agostino
Line A V.Le P.L. Nervi
Line A Via Milano
Line A Via Palermo
Line A Via Mazzocchi Alemanni
Line A Traceback (most recent call last):
  File "BUS.py", line 30, in <module>
    main()
  File "BUS.py", line 29, in main
    print(key, ele)
  File "C:\Python34\lib\encodings\cp850.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2019' in position
8: character maps to <undefined>
Premere un tasto per continuare . . .

I cannot understand the error "encode" Someone can explain?

Bolo
  • 11,542
  • 7
  • 41
  • 60
  • Did you look at the character at index `8` of the `ele` causing the failure? `"Via Sant’Agostino"` - what's with the [right single quotation mark](http://www.fileformat.info/info/unicode/char/2019/index.htm)? – jonrsharpe Jul 10 '14 at 14:52
  • Try adding `# -*- coding: utf8 -*-` at the top of your file (or whatever encoding the file has). – tobias_k Jul 10 '14 at 14:55

1 Answers1

1

Firstly, there is no need for continuation backslashes when defining the list contents.

Your program is just fine. Probably also the source code is stored in UTF-8 and Python consumes it correctly.

In my opinion, the problem is with the print command in combination with output to the console window. The Microsoft console window uses the cp850 encoding in your case, and it is not capable to display the special character. (Better to say, Python discovered that the console uses the encoding and Python is not able to convert the output for the console window.) Try the following modification that writes the output to the file instead:

#!python3
lineA = ["Stazione Autolinee","Via Romagnoli","Via E.Filiberto", 
        "Piazza del popolo" , "Via Cattaneo", "Via Pio VI", "P.Le Prampolini", 
        "Via dei Mille", "Via Villafranca","Via Romagnoli", "Viale Kennedy", 
        "Via Mosca","Via Bucarest","Via U.Zani","Via Kennedy","Via Bruxelles", 
        "Via Bachelet","Via Mazzocchi Alemanni","Via Sant'Agostino", "V.Le P.L. Nervi", 
        "Via Milano" , "Via Palermo" , "Via Mazzocchi Alemanni" , "Via Sant’Agostino", 
        "Via Del Lido" , "Via Garigliano" , "Via Pio VI" , "C.so della Repubblica", 
        "Piazza del Popolo" , "Via C. Battisti" , "Via E. Filiberto" , "Via Romagnoli", 
        "Stazione Autolinee"]
lineB = ["Stazione Autolinee" , "Via Romagnoli" , "Via E. Filiberto" , "Piazza del Popolo", 
        "Via Diaz" , "V.Le Don Morosini" , "V.Le Mazzini" , "Viale dello Statuto" , 
        "Via Virgilio" , "Via Terenzio" , "V.Le Petrarca" , "Via dei Volsci" , "Via Don Torello" , 
        "Via S.Francesco D'Assisi" , "Via Pantanaccio" , "Via Epitaffio" , "Via M. Terminillo" , 
        "Via G.S. d' Italia" , "Via Pionieri della Bonifica" , "P.Le Carturan" , "Via Carturan" , 
        "Corso della Repubblica" , "Via C. Battisti" , "C.so Matteotti" , "Piazza del Popolo" , 
        "Corso Della Repubblica" , "Via C. Battisti" , "Via E. Filiberto" , "Stazione Autolinee"]
diz = {"Line A":lineA, "Line B":lineB}

with open('output.txt', 'w', encoding='utf-8') as fout:
    for key in diz:
        for ele in diz[key]:
            fout.write('{} {}\n'.format(key, ele))

... and look inside the output.txt.

pepr
  • 20,112
  • 15
  • 76
  • 139