as3:~/ngokevin-site# nano content/blog/20140114_test-chinese.mkd
as3:~/ngokevin-site# wok
Traceback (most recent call last):
  File "/usr/local/bin/wok", line 4, in
    Engine()
  File "/usr/local/lib/python2.7/site-packages/wok/engine.py", line 104, in init
    self.load_pages()
  File "/usr/local/lib/python2.7/site-packages/wok/engine.py", line 238, in load_pages
    p = Page.from_file(os.path.join(root, f), self.options, self, renderer)
  File "/usr/local/lib/python2.7/site-packages/wok/page.py", line 111, in from_file
    page.meta['content'] = page.renderer.render(page.original)
  File "/usr/local/lib/python2.7/site-packages/wok/renderers.py", line 46, in render
    return markdown(plain, Markdown.plugins)
  File "/usr/local/lib/python2.7/site-packages/markdown/init.py", line 419, in markdown
    return md.convert(text)
  File "/usr/local/lib/python2.7/site-packages/markdown/init.py", line 281, in convert
    source = unicode(source)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 1: ordinal not in range(128). -- Note: Markdown only accepts unicode input!

如何解决?

在其他一些基于python的静态博客应用中,中文帖子可以成功发布。 比如这个应用:http://github.com/vrypan/bucket3。在我的网站http://bc3.brite.biz/,中文帖子可以成功发布。


当前回答

为了在Ubuntu安装的操作系统层面上解决这个问题,请检查以下内容:

$ locale charmap

如果你得到

locale: Cannot set LC_CTYPE to default locale: No such file or directory

而不是

UTF-8

然后像这样设置LC_CTYPE和LC_ALL:

$ export LC_ALL="en_US.UTF-8"
$ export LC_CTYPE="en_US.UTF-8"

其他回答

我正在搜索解决以下错误信息:

Unicodedecodeerror: 'ascii'编解码器无法解码位置5454中的字节0xe2:序号不在范围(128)

我最终通过指定'encoding'来修复它:

f = open('../glove/glove.6B.100d.txt', encoding="utf-8")

希望它也能帮助到你。

我有同样的错误,url包含非ascii字符(值> 128的字节),我的解决方案:

url = url.decode('utf8').encode('utf-8')

注意:utf-8, utf8只是别名。只使用'utf8'或'utf-8'应该以同样的方式工作

在我的情况下,为我工作,在Python 2.7中,我认为这个赋值改变了str内部表示中的“某些东西”——即。,它强制正确解码url中支持的字节序列,并最终将字符串放入utf-8 STR中,所有的魔法都在正确的地方。 Python中的Unicode对我来说是一种黑魔法。 希望有用

当字符串中有一些非ASCII字符,并且我们在没有正确解码的情况下对该字符串执行任何操作时,就会发生此错误。 这帮我解决了我的问题。 我正在阅读一个列ID,文本和解码字符的CSV文件,如下所示:

train_df = pd.read_csv("Example.csv")
train_data = train_df.values
for i in train_data:
    print("ID :" + i[0])
    text = i[1].decode("utf-8",errors="ignore").strip().lower()
    print("Text: " + text)

简而言之,为了确保在Python 2中正确处理unicode:

使用io。打开文件读写 使用from __future__ import unicode_literals 配置其他数据输入/输出(例如,数据库,网络)使用unicode 如果不能将输出配置为utf-8,请将输出转换为print(text。编码(“ascii”、“替换”).decode ())

有关解释,请参阅@Alastair McCormack的详细回答。

在某些情况下,当你检查你的默认编码(打印sys.getdefaultencoding())时,它会返回你使用的是ASCII。如果您更改为UTF-8,它将不起作用,这取决于变量的内容。 我找到了另一种方法:

import sys
reload(sys)  
sys.setdefaultencoding('Cp1252')