谈谈Python编码问题和Unicode

Slides:



Advertisements
Similar presentations
分享人:張益源. 個人資料介紹 姓名:張益源 畢業:體育系 97 級 專長:田徑、籃球、游泳 任教學校:慈濟大學實驗國民小學 學校職務:體育兼資訊老師.
Advertisements

教育部 1 教育部技職司 南區: 2010 年 11 月 5 日 北區: 2010 年 11 月 8 日 中區: 2010 年 11 月 9 日 產學攜手合作計畫 政策宣導.
104 年度環保小學堂 經費編列注意事項 會計室 : 丁子芸 中華民國 103 年 10 月 22 日 會計室 : 丁子芸 中華民國 103 年 10 月 22 日.
(一)辦桌文化起始略說: 1. 祭祀宗教 2. 生命禮儀 3. 外燴 --- 老師、師公、師傅、總鋪師 4. 搬桌搬椅時代 (二) 食物食材 1. 靠山考海 2. 基本:炒米粉、糍、檳榔 3. 小吃搬上桌 (三) 變變變 1. 調味不同 2. 師承不同 3. 地點也變.
第4章 交易性金融资产与可供出售金融资产 学习目标
从生命伦理学角度 对转基因食品市场准入标准及道德评价标准的研究
(4F01) 陳可兒 (4F03) 張令宜 (4F05) 何秀欣 (4F14) 潘美玲
第2章 數位資料表示法 2-1 資料型態 2-2 二進位表示法 2-3 各種進位表示法的轉換 2-4 整數表示法 2-5 浮點數表示法
寫作教學—標點符號.
C语言程序设计 李伟光.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
小学《人•自然•社会》 五年级教材解读 浙江省教育厅教研室 李 荆 -
汉字编码 汉字编码.
5.1 文本与文本处理 5.2 图像与图形 5.3 数字声音及应用 5.4 数字视频及应用
輕歌妙舞送黃昏 組員名單 組長:程鵬飛 組員:黎達華 劉展鵬 邱迦欣.
期考議題 單元一:資訊科技(eg上網活動)與人際關係 單元二:青少年社政參與(80後) 單元二:郊野公園與房屋政策/問題
第二章 项目一:企业厂区与车间平面设计 1.
個人投資理財分析 財務狀況匯總表 銀行存款 共同基金 外幣基金 股票投資 保險價值 黃金投資 支出預算 房貸計算 不動產價值 資源變化資料庫
大學多元入學方案 財務金融二 王詩茹.
Unicode和多语言信息处理 adoal.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
人地關係 ── 熱帶雨林 人文活動對環境的影響.
计算机基础.
计算机与信息技术应用基础 徐东雨 计算机中心
正则表达式一点通:正则中的中文.
Google App Engine Google 應用服務引擎.
科學科 污染 空氣 成因 的 : 題目 及 減少空氣污染的方法 陳玉玲 (4) 姓名 : 去到目錄.
伯裘書院 環保廣告能否有效 地推動環保意識.
第五课 闭着眼睛测试软件.
Socket.
4H (1)歐宛曈 (9)李熹漩 (12)吳紀芙 (14)唐曉筠
在PHP和MYSQL中实现完美的中文显示
第二章 计算机基础知识 2.1 计算机系统的组成与工作原理 2.2 数制转换及运算 2.3 数据在计算机中的表示.
Using C++ The Weird Way Something about c++11 & OOP tricks
第 2 章 必備的 HTML 與 CSS 重點.
Go语言就业指南 岳东卫 技术总监 讲师的CSDN博客地址
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
API设计实例分析 通用IO API.
Visual Basic 6.0 學習範本 第三章 基本資料型態.
Hadoop I/O By ShiChaojie.
程式設計實作.
辅导课程十三.
辅导课程九.
任务调度架构变迁史 知道创宇 杨冀龙.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
IT&SAMS小組 (IIT - 倉頡輸入法)
全国图书馆联合编目系统异构系统上载 发言人:索晶 2013年12月13日.
Chinese World hmwang.
性能的秘诀 chrome插件支持推送.
CNNIC中文域名系统 中国互联网络信息中心 CNNIC China Internet Network Information Center
本节内容 字符编码 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第 1 章 文字媒體 多媒體導論與應用-第三版 1.1 文字的格式 1.2 數位化文字的應用 1.3 課後練習
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
$15 文件操作. $15 文件操作 主要内容 文件系统概述 驱动器、目录和文件 文件流和数据流 自定义IO操作.
ES 索引入门
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Javascript 基础 面向非JS语言的开发人员.
Review 1~3.
设岗申请 审核发布 岗位申请 助教培训 津贴发放 工作考核 授课教师 岗位要求 工作内容 开课单位 确定课程、岗位 发布需求 研究生
指導老師:蘇怡仁老師 組員:陳翊嘉、何盈宏、黃皇瑋、鄭楚懷
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
厦门大学数据库实验室 2014暑期奋战70天总结 罗道文
英語職涯規劃 移民署職場生涯 5.2.1善用慈濟資源‧提升職涯就業力.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
方格紙上畫正方形.
大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编.
第2章 Java语言基础.
Introduction to Computer Security and Cryptography
聖經的獨特.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
Presentation transcript:

谈谈Python编码问题和Unicode taochunhua@tencent

outline Unicode基础知识 Python的str和unicode Json编码工具 实例

Unicode Ascii时代 MBCS时代(多字节字符集) Unicode 7位,最高位是校验位 中文CP963,GBK,GB2312,BIG5 Unicode Unicode16,Unicode32

Big Endian & Little Endian Host Byte Order & Network Byte Order 题外话:存在与表示 Big Endian & Little Endian SPARK, x86, ARM Host Byte Order & Network Byte Order htonl, ntohl, htons, ntohs Object Persistence & Serialize MFC, java serialiable interface and persistence api, protobuf Unicode & UTF, UCS Several mechanisms have been specified for implementing Unicode.

Unicode Transformation Format (UTF) unicode & utf unicode unicode16, unicode32 Unicode Transformation Format (UTF) UTF16(Big/Little Endian) UTF32(Big/Little Endian) UTF8 变长方案 思考?为什么是变长的?如何实现?

str用来存储各种utf数据,包括gbk等 可以认为:unicode对象是理想的unicode,str是丑陋的现实(各种utf) Python str & unicode str对象 存储ascii字符串,以及二进制数据 unicode对象 存储unicode字符串,采用的是utf16或utf32 str用来存储各种utf数据,包括gbk等 可以认为:unicode对象是理想的unicode,str是丑陋的现实(各种utf)

str与unicode的转化

使用时机 拇指定律 例子 IO时用str 内部处理时用unicode 从外部读入时它是str 转为unicode进行必要处理 e.g. network, file read write 内部处理时用unicode json encode, string process 例子 从外部读入时它是str 转为unicode进行必要处理 再转为str输出

demo 体验demo.py

我懂了上面说的,为什么json还是搞不定? import json 我懂了上面说的,为什么json还是搞不定? 嗯,因为json帮你encode,decode了一些东西 需要仔细阅读json模块的文档

json.dumps(obj, ensure_ascii,encoding...) obj python数据结构: dic, list ... ensure_ascii = True(default) dumps返回一个str ensure_ascii = False dumps返回一个unicode!我们可以进一步对它encode encoding 在obj进行转化之前,所有obj中的str会转为unicode,即str.decode(encoding) 默认情况: str -> unicode -> json(unicode) -> str

json.dumps(d, encoding='gbk') 一个默认处理 json.dumps(d, encoding='gbk') 它返回一个str str -> unicode -> json(unicode) -> str str->unicode的decode在 encoding参数控制 json(unicode) -> str 这里的encoding是默认控制的! 这个默认控制不是encode,而是直接把unicode转义为ascii编码,这个ascii码的内容是unicode! 这里应该是个utf8,这个过程是个硬编码:见lib中encode.py

证据 老白干酒 utf8 : 0x8001 0x767D 0x5E72 0x9152 gbk : 0xC0CF 0xB0D7 0xB8C9 0xBEC6

JSON本身的规范和实现 有了以上知识,我们还有可能搞不定特定需求:比如,请给我弄个GKB的字符串! JSON规范定义string必须是unicode字符串,但是实现形式默认是utf8 有些json解析函数仅实现了utf8,不支持其他格式!

实例 后台程序写入数据到redis

实例 redis中数据

实例 php接口