Python 3.x 如何告诉python3字符串是UTF-8?

Python 3.x 如何告诉python3字符串是UTF-8?,python-3.x,utf-8,Python 3.x,Utf 8,我已经在flask中编写了一个web应用程序。对于其中一个端点,我从request.form中获取som元素,使用模板和format()将其转换为格式化行,然后将其写入文件。只要内容是ascii字符,就可以了。由于此web应用程序要处理挪威语文本,它还必须处理包含字母æøåÆØ的字符串。在这种情况下,应用程序将失败,因为行文件中出现“UnicodeEncodeError'ascii'编解码器无法对第78位的字符'\xe6'进行编码:序号不在范围内(128)”(如果它包含一个æ)。写入(句子) 看

我已经在flask中编写了一个web应用程序。对于其中一个端点,我从request.form中获取som元素,使用模板和format()将其转换为格式化行,然后将其写入文件。只要内容是ascii字符,就可以了。由于此web应用程序要处理挪威语文本,它还必须处理包含字母æøåÆØ的字符串。在这种情况下,应用程序将失败,因为行文件中出现“UnicodeEncodeError'ascii'编解码器无法对第78位的字符'\xe6'进行编码:序号不在范围内(128)”(如果它包含一个æ)。写入(句子)

看起来python试图将我的字符串从ascii编码为unicode,但失败了,因为它已经是UTF-8了

如何告诉python我已经拥有的字符串是UTF-8

我有

# -*- coding: utf-8 -*-
作为文件的第一行

相关代码(略缩写)

comment=request.form['comment']
author=request.form['author']
服务=请求。表单['service']
host=request.form['host']
now=int(time.time())
rawstation=“[{}]确认问题;{};{};2;1;1;{};{}”
句子=rawstation.format(现在,主机,服务,作者,评论)
文件名=
打开(文件名,'w')作为文件:
文件。写(句子)

打开文件时只需设置编码即可

打开(文件名为'w',编码为='utf-8')作为文件:
文件。写(句子)

错误确切起源于何处?显示回溯。也许您希望
打开(文件名为'w',编码为'utf-8')
…?看起来您的表单数据也不是UTF-8编码的,而是拉丁语-1编码的,因此您还需要更改HTML/HTTP头中的某些内容,以确保浏览器以UTF-8的形式发送数据。编码=成功。请作为答复重写,以便我可以接受。。。(但数据是utf-8)Morten,当你在Python 3中有一个
str
对象时,它不再是utf-8了——它是一个带代码点的解码字符串。(事实上,它在内部由ASCII、UTF-16或UTF-32表示,具体取决于数据,但这是从用户那里抽象出来的。)不管文本最初是用什么(UTF-8或其他什么东西)编码的,它现在都被解码了,您可以再次编码(使用UTF-8或其他编解码器)以将其写入磁盘或通过网络发送。
comment=request.form['comment']
author=request.form['author']
service=request.form['service']
host=request.form['host']
now=int(time.time())
rawsentence="[{}] ACKNOWLEDGE_SVC_PROBLEM;{};{};2;1;1;{};{}"
sentence=rawsentence.format(now,host,service,author,comment)        
filename=<SOME FILE>
with open(filename,'w') as file:
        file.write(sentence)