无法在Python 3.2中运行具有一个特定Unicode字符的脚本

时间:2011-08-20 17:54:39

标签: unicode python-3.x

在Python 3.2中运行这个UTF-8编码脚本有一个奇怪的问题。如果Python包含日语平假名字符の(参见下面的堆栈跟踪)

,则拒绝运行
Traceback (most recent call last):
  File "MyScript.py", line 20, in <module>
    print(no)
  File "C:\Python32\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 '\u306e'
                    in position 0: character maps to <undefined>

没有这一个字符就可以正常运行(文件中还有其他字符),我无法解释原因。任何帮助将不胜感激。

这是一个为我重现错误的脚本:

#!/usr/bin/env python
# coding=utf-8

import glob
import codecs
import os.path
from datetime import datetime, timedelta

assTemplate = \
r"""タイトル\N {time.year}年{time.month}月{time.day}日 {age}\N{place}"""

for mtsName in glob.glob('./*.MTS'):
    baseName = mtsName.lower().replace('.mts', '')
    mtsName = os.path.abspath(mtsName)

    # Get the time the video file was created.
    mtsTimestamp = datetime.fromtimestamp(os.stat(mtsName).st_ctime)

    no = '\u306e'  
    print(no)       ## UnicodeDecodeError
    age = '生後'
    place = '自宅'
    print('自宅')

    # Generate the contents of the ASS file.
    assContents = assTemplate.format(time=mtsTimestamp, age=age, place=place)

    # Write the ASS file.
    print(assContents)

使用Python 3.2的原因是在Python 2.7.2中,使用unicode字符串的字符串格式化对我来说根本不起作用。

2 个答案:

答案 0 :(得分:1)

您正在尝试将unicode字符打印到使用cp1252的终端。 cp1525根本不支持任何日文字符。因此,对于那个角色来说不是问题,我打赌你会得到与任何日文字符完全相同的错误。

答案 1 :(得分:-1)

我也有这个问题。 我的语言是越南语。 您可以剪切文件cp1252.py或删除此文件。您应该剪切此文件并移动另一个文件夹,您喜欢的任何文件夹。现在,在编码文件夹中没有文件cp1252.py,不用担心。接下来,在encodings文件夹中复制文件utf-8并将此文件粘贴到编码文件夹,并将此文件重命名为cp1252.py。你明白吗。

我解决了这个问题。

成功!

我的雅虎昵称是:phong_ux。 如果您需要更多帮助,我愿意帮助您。