2014-11-02 75 views
1

我有一个包含大量文本的大表单。例如,它可能包含带引号的单词,如"Программа"。当我将它提交给服务器并尝试将提交的内容写入文件时,出现错误。如果我用拉丁字母替换所有西里尔字母,那么一切正常。问题显然在服务器端。我想,如果我新的如何处理像"Текст на кириллице"这样的字符串,我可以解决这个问题。如何在Python/Django中将西里尔字母写入文件

+0

什么错误,你得到什么呢? – 2014-11-02 14:01:03

+0

服务器应该返回json'{success:true}',并且客户端用一个警告'Saved!'来响应。拉丁字母的作品,但与西里尔字母我看不到来自服务器的回应。 – Jacobian 2014-11-02 14:07:14

回答

3

当您写入文件unicode字符串时,必须先对其进行编码。

让我们尝试以下操作:

# -*- coding: utf-8 -*- 
text = u"Текст на кириллице" 

with open('outfile.txt', 'w') as fw: 
    fw.write(text) 

该代码将引发异常

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) 

所以,仅仅编码的文本。其中最流行的编码为“UTF8”:

# -*- coding: utf-8 -*- 
text = u"Текст на кириллице" 

with open('outfile.txt', 'w') as fw: 
    fw.write(text.encode('utf8')) 

你必须记住的编码,这是用来编码的文本,以便在将来读它。 从文件中读取的文本,用书面方式中使用相同的编码解码它:

with open('outfile.txt') as f: 
    text = f.read() 

print text.decode('utf8') 
+0

如果我将文本作为变量传递,我应该怎么做?我的意思是,这个“text = u变量”是正确的吗?我不知道正确的语法 – Jacobian 2014-11-02 14:11:50

+0

在我的例子'text' - 是一个变量,'u“Текстнакириллице”'是一个变量值 – stalk 2014-11-02 14:13:03

+0

我的意思是,我想在右侧有一个变量。想象一下,我有一个变量,它包含这个文本'Текстнакириллице'。我应该如何将它转换为utf?只是你变了吗?或者variable.encode(utf8)? – Jacobian 2014-11-02 14:16:56