【问题标题】:UnicodeEncodeError: 'charmap' codec can't encode characters in position 49-53: character maps to <undefined>UnicodeEncodeError:“charmap”编解码器无法对位置 49-53 中的字符进行编码:字符映射到 <undefined>
【发布时间】:2016-03-26 05:21:21
【问题描述】:

这是我创建文件的代码

character = open(namecharacter + '.txt', 'wt')
    character.write('Name: ' + namecharacter + '\n\nClass: ' + category + '\n\nHealth: ♥♥♥♥♥\n\nStrenght: ' + str(strength_new) +
                    '\n\nDefense: ' + str(defense_new) + '\n\nDexterity: ' + str(dexterity_new) +
                    '\n\nRanged Attack: ' + str(ranged_new) + '\n\nMelee Attack: ' +
                    str(melee_new) + '\n\nSpeed: ' + str(speed_new))
    character.close()

然后它给出了这个错误代码:

Traceback (most recent call last):
  File "F:\Fantasy Board Game\Game Program\DandD style game.py", line 566, in <module>
str(ranged_new) + '\n\nMelee Attack: ' + str(melee_new) + '\n\nSpeed: ' + str(speed_new))
File "C:\Users\Jedidiah\AppData\Local\Programs\Python\Python35-32\lib\encodings\cp1252.py", line 19, in encode
  return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 49-53: character maps to <undefined>

错误的行是:

str(melee_new) + '\n\nSpeed: ' + str(speed_new))

我知道以前有人问过这个问题,但我真的不明白如何解决它,也不知道为什么会这样。我在代码中的所有变量之前都已声明过,并且都可以在其他代码行中使用。

【问题讨论】:

    标签: python-3.x unicode encode codec


    【解决方案1】:

    您尝试打印的 字符在open 使用的默认编码cp1252 中不存在。您可以将要使用的编码作为参数传递,例如:

    character = open(namecharacter + '.txt', 'wt', encoding='utf8')
    

    完整示例(确保以声明的 UTF-8 源编码保存文件):

    #coding: utf8
    
    datafmt = '''\
    Name:          {namecharacter}
    Class:         {category}
    Health:        ♥♥♥♥♥
    Strength:      {strength_new}
    Defense:       {defense_new}
    Dexterity:     {dexterity_new}
    Ranged Attack: {ranged_new}
    Melee Attack:  {melee_new}
    Speed:         {speed_new}
    '''
    
    player = {'namecharacter' : 'Mark',
              'category' : 'Wizard',
              'strength_new' : 10,
              'defense_new' : 100,
              'dexterity_new' : 15,
              'ranged_new' : 10,
              'melee_new' : 5,
              'speed_new' : 10}
    
    with open(player['namecharacter'] + '.txt', 'w', encoding='utf8') as character:
        character.write(datafmt.format(**player))
    

    输出:

    Name:          Mark
    Class:         Wizard
    Health:        ♥♥♥♥♥
    Strength:      10
    Defense:       100
    Dexterity:     15
    Ranged Attack: 10
    Melee Attack:  5
    Speed:         10
    

    【讨论】:

    • (1) 在 Python 3 上你不需要 coding: utf8 (2) 值得一提的是 Python 源代码的字符编码(utf-8 是 Python 3 上的默认值) ) 以任何方式与文本文件的字符编码无关,例如,可以表示(U+2665 Unicode 代码点)的任何字符编码都可以在这里执行(例如,utf-16——记事本更有可能在 Windows 上识别 utf-16 文件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2021-01-27
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2017-11-07
    相关资源
    最近更新 更多