2009-12-22 97 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