广告
返回顶部
首页 > 资讯 > 后端开发 > Python >setdefaultencoding p
  • 480
分享到

setdefaultencoding p

setdefaultencoding 2023-01-31 01:01:43 480人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

页面源代码如下 #-*- coding: utf8 -*- import cgitb , cgi cgitb.enable() fORM = cgi.FieldStorage() if (form.has_key("na

页面源代码如下

#-*- coding: utf8 -*-

import cgitb , cgi
cgitb.enable()

fORM = cgi.FieldStorage()
if (form.has_key("name") and form.has_key("addr")):
    print "<p>name:", form["name"].value

    print "<p>addr:", form["addr"].value

[这里仅仅测试addr参数为中文]接收Ascii字符时运行良好,但是接收中文字符时显示乱码,浏览器切换到GB2312编码时

可以正常显示,但是个人要求它成为UTF-8编码显示

改成 print "<p>addr:", form["addr"].value.encode('utf-8') 就报如下错误:

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data

在参阅了Http://blog.chinaunix.net/u2/68206/showart_668359.html 后终于理解,

python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。编码是 unicode -> str,相反的,解码就
是 str -> unicode。剩下的问题就是确定何时需要进行编码或者解码了.关于文件开头的"编码指示",也就是 # -*- coding: -*- 这个语句。Python 默认脚本文件都是 UTF-8 编码的,当文件中有非 UTF-8 编码范围内的字符的时候就要使用"编码指示"来修正. 关于 sys.defaultencoding,这个在解码没有明确指明解码方式的时候使用。比如我有如下代码:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
s = '中文' # 注意这里的 str 是 str 类型的,而不是 unicode
s.encode('gb18030')

这句代码将 s 重新编码为 gb18030 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此
Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb18030。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是
ANSCII,如果 s 不是这个类型就会出错。拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式和文件的编码方式一致,是 utf8 的,所以出错了:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position
0: ordinal not in range(128)
对于这种情况,我们有两种方法来改正错误:
一是明确的指示出 s 的编码方式

#! /usr/bin/env python
# -*- coding: utf-8 -*-

s = '中文'
s.decode('utf-8').encode('gb18030')
二是更改 sys.defaultencoding 为文件的编码方式

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding('utf-8')

str = '中文'
str.encode('gb18030')

看完之后,改成这样

print "<p>addr:", form["addr"].value.decode('gb2312').encode('utf-8')
成功通过.

--结束END--

本文标题: setdefaultencoding p

本文链接: https://www.lsjlt.com/news/184912.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • setdefaultencoding p
    页面源代码如下 #-*- coding: utf8 -*- import cgitb , cgi cgitb.enable() form = cgi.FieldStorage() if (form.has_key("na...
    99+
    2023-01-31
    setdefaultencoding
  • *p++和(*p)++有什么区别
    本篇内容介绍了“*p++和(*p)++有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“*p++”和“(*p)++”的区别是:1、“...
    99+
    2023-06-20
  • InspectionSystem---p
    inspectionsystem项目流水账   安装python 虚拟环境 ----virtualenvwrapper     mkvirtualenv inspectionsystem 环境名 安装django   pip instal...
    99+
    2023-01-30
    InspectionSystem
  • delete[]p->elems和free(p->elems)区别介绍
    delete[]和free()都是释放内存的函数,但它们具有不同的使用方法和适用情况。 delete[] 通常用于释放C++中动态分配的数组空间。在使用new[]运算符分配内存时,应...
    99+
    2023-05-14
    delete[] p->elems和free(p->elems)区别 delete[] p->elems和free(p->elems)
  • delete[] p->elems和free(p->elems)区别是什么
    这篇文章主要讲解了“delete[] p->elems和free(p->elems)区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“delete[] p->ele...
    99+
    2023-07-05
  • pip install mysql-P
    错误: #warning This file should not be included by clients, include only <mysql.h>^In file included from _mysql.c:46...
    99+
    2023-01-31
    pip install mysql
  • Postgres 11.4 pg_basebackup P
    报错截图: pg_basebackup: could not get write-ahead log end position from server: ERROR: could not open...
    99+
    2022-10-18
    pg_basebackup postgres 11.3/4 pg备份 恢复 流复制
  • Windows XP Service P
    Windows XP Sercvice Pack 3 已经签署 MSDN 协议并发布了,相信有不少朋友都在关注着他,当获取到 WXPSP3 后大部分用户都会直接在现有的系统上进行升级,也有一些用户在升级到SP3时不希望保留所需的卸载文件,更...
    99+
    2023-01-31
    Windows XP Service
  • Built-in Functions(p
        在python中有很多的内置函数,这些内置函数让我们更高效,在此将部分相关知识总结一下。官网地址:https://docs.python.org/3.6/library/functions.html Built-in Functio...
    99+
    2023-01-31
    Built Functions
  • Nginx+uWSGI+DJango+P
    本文出自:http://www.mpyun.com/一、安装所需工具yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf li...
    99+
    2023-01-31
    Nginx uWSGI DJango
  • Linux Ubuntu 16.04 p
      os.walk(top,topdown=True,onerror=None,followlinks=False)   os.walk()是python中内置(built-in)的目录树生成(directory tree generat...
    99+
    2023-01-30
    Linux Ubuntu
  • c语言中*p和p的区别是什么
    区别:1、表示的含义不同,“*p”表示此指针指向的内存地址中存放的内容,“p”表示一个指针变量的名字,指此指针变量所指向的内存地址。2、输出的格式不同,“*p”输出的一般是一个和指针类型一致的变量或者常量,“p”输出的是一个16进制数, 输...
    99+
    2023-05-14
    指针 C语言
  • c语言中*p和p的区别有哪些
    这篇文章主要讲解了“c语言中*p和p的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中*p和p的区别有哪些”吧!区别:1、表示的含义不同,“*p”表示此指针指向的内存地址中存...
    99+
    2023-07-04
  • pycharm + docker 配置p
    略。。 不管是win、liunx、mac,下载安装都挺简单的。docker是开源的,这里贴一下 pycharm 可以永久破解的网站,虽然大多数人是知道的,萌新记得要照着说明配置一下hosts文件哦 建 Dockerfile 文件 较新...
    99+
    2023-01-31
    pycharm docker
  • enq: SQ – contention、cursor: p
    事情已经过去一年,发生在15年1月份,某全国业务系统,实时的号码办理系统,收到短信告警,该系统断开连接。数据库出现大量enq: SQ – contention、cursor: pin S wait...
    99+
    2022-10-18
    s cursor pin
  • hadoop+hbase+zookeeper+spark+p
    排错日志:解决办法:可能是修改 机器名导致的,修改hosts,写入hostname和IP,然后,try it agin!解决办法:当引入hadoop-common-2.2.0.jar包进行二次开发,比如读写...
    99+
    2022-10-18
    开发 spar doop
  • css p是什么
    本篇内容介绍了“css p是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
    css
  • C语言中*p+1和*(p+1)之间有什么不同
    本篇内容主要讲解“C语言中*p+1和*(p+1)之间有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中*p+1和*(p+1)之间有什么不同”吧!区别是:1、*p表示此指针指向的内存...
    99+
    2023-06-20
  • centos6.5下安装OpenCV+P
    Python调用opencv的原理是:opencv编译出共享库文件,python把这个共享库文件作为一个模块加载并使用。通俗点就是,编译opencv的时候开启python接口选项,编译好了会产生cv2.so(linux下)或者cv2.pyd...
    99+
    2023-01-31
    OpenCV
  • 速学python之headfirst p
    速学python之headfirst python第三章学习笔记.pdf:原书下载HeadfirstPython.pdf...
    99+
    2023-01-31
    python headfirst
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作