This topic created in 3490 days ago, the information mentioned may be changed or developed.
初学 python ,今天在使用 django 的时候遇到一些编码问题,希望大神指教下。
我在访问 index 方法的时候不会报错,但是访问 news 方法的时候却报错,只有把第二个方法加上 u ,也就是这样才能正确输出
我想问加上 u 之后 python 到底干了什么动作,为什么第一个 index 方法就可以正常输出?
Supplement 1 · Nov 18, 2016
我昨天发现貌似是因为 django 自动把传进来的参数进行了 unicode 操作,把代码改成
return HttpResponse(u"新闻 ID 是:%s" % news_id)
或者
return HttpResponse("新闻 ID 是:%s" % news_id.encode("utf8"))
就可以了
9 replies • 2016-11-17 23:28:18 +08:00
 |
|
1
Sylv Nov 17, 2016 via iPhone
报的是 UnicodeEncodeError 错吗? news_id 是不是有非 ascii 字符?
|
 |
|
6
Sylv Nov 17, 2016
"新闻 ID 是:%s" % news_id 会报错是因为 news_id 是 unicode 类型,"新闻 ID 是:%s" 则是 str 类型,在格式化字符串时如果有参数是 unicode 类型,会将 str 类型字符串转换为 unicode 后再能格式化,最后的字符串也就是 unicode 类型。而 Python2 默认编码是 ascii ,用 ascii 编码转换 str 类型的 "新闻 ID 是:%s" 为 unicode 时就会报 UnicodeDecodeError 错了,因为其中包含非 ascii 字符的汉字。
u"新闻 ID 是:%s" % news_id 没有问题是因为两个字符串都是 unicode 类型,那么格式化后输出的也是 unicode 字符串,没有涉及到编码转换,所以不会报错。
|
 |
|
7
Sylv Nov 17, 2016
Django 的 HttpResponse 方法应该 str 和 unicode 两种类型的字符串都能接收, Django 内部应该会自动处理编码转换,所以 HttpResponse("这是首页") 可以正常输出。
|