2009-12-22 124 views
2

我应该如何在Python中编写“mąka”而没有异常?变音符号

我试过var= u"mąka"var= unicode("mąka")等..没有什么帮助

我已经在我的文档编码在第一线的定义,仍然我有一个例外:

'utf8' codec can't decode byte 0xb1 in position 0: unexpected code byte

回答

1

什么异常你会得到吗?

您可以尝试保存您的源代码文件为UTF-8,并把这个在文件的顶部:

# coding=utf-8 

这告诉Python保存为UTF-8的文件的。

+0

我: # - * - coding:utf-8 - * - 它有什么区别吗? 但是,当我改变它时,仍然没有发生什么...... – Driego 2009-12-22 17:59:01

+0

这需要是文件中的第一行或第二行,每个PEP 0263(http://www.python.org/dev/peps/pep -0263 /)。此外,如果您仍然遇到异常情况,请指定它是哪种异常情况,以便尝试和提供帮助。 – 2009-12-22 18:03:36

1

此代码对我的作品,将文件保存为UTF-8:

v = u"mąka" 
print repr(v) 

我得到的输出是:

u'm\u0105ka' 

请复制并粘贴您得到确切的错误。如果您收到此错误:

UnicodeEncodeError: 'charmap' codec can't encode character ... in position ...: character maps to <undefined> 

然后你想输出的字符的地方,不支持UTF-8(例如你的shell的字符编码设置为UTF-8以外的东西)。

2

的# - - 编码: - - 行必须指定源文件保存在编码此错误消息:

'utf8' codec can't decode byte 0xb1 in position 0: unexpected code byte 

表明你是不是节省UTF源文件。 -8。您可以将源文件保存为任何支持您在源代码中使用的字符的编码,只要确保知道它是什么并且有合适的编码线即可。

+0

你可能是对的。 Driego应该尝试用SOURCE文件将utf-8替换为'sys.getdefaultencoding()'值 – mykhal 2009-12-22 21:55:54

4

保存以下两行到write_mako.py

# -*- encoding: utf-8 -*- 
open(u"mąka.txt", 'w').write("mąka\n") 

运行:

$ python write_mako.py 

mąka.txt文件,其中包含mąka应在当前目录中创建了字。

如果它不工作,那么你可以使用chardet来检测该文件的实际编码(见chardet example usage):

import chardet 

print chardet.detect(open('write_mako.py', 'rb').read()) 

对我来说,它打印:

{'confidence': 0.75249999999999995, 'encoding': 'utf-8'} 
+0

chardet? – 2009-12-22 21:56:26

+0

绝望的时代和所有。 – 2009-12-22 22:39:34

+0

@John:是的,OP问题很可能是源文件编码与'' - * - encoding:''行不符。 – jfs 2009-12-22 22:39:50