Python3的unicode编码转换成中文问题

Python3的unicode编码转换成中文问题

从别的地方搬过来的,担心以后不容易搜索到,就收集过来。

我当时面临的问题是要从C++发json代码出来,用python写了个server,然后返回给C++程序,结果收到的是:
httpSvrDataCbUser: {"tranNO": "0808ad498670dc996", "data": "\u65b0A1EY16", "ver": "1.0", "sendTime": "2019-12-10 00:23:51", "tranType": "2001"}

我发过去的是utf-8编码,中间有中文,"新A1EY16",结果发回来的却是:"\u65b0A1EY16"

原创蓝一潇、薛定谔的猫 发布于2019-02-09 00:49:39 阅读数 4682  收藏 分类专栏: python基础笔记

展开

9102年,大部分人已经受尽了python2里面unicode的折磨,转向了python3。
python3似乎对一切的unicode都那么的友好,当一个字符串里存在unicode的时候,只要字符串是硬编码的,就可以转换成中文打印在控制台上,如:

s = ‘\u7b14\u8bb0’
print(s)

你得到的就是中文汉字。
但是,假如你。。的这段含有‘\u’的unicode编码不是硬编码进脚本的,而是通过requests在网上爬的。。。那么你会发现,你打印出来的,还是长这样的unicode编码,换句话说,解释器这个时候根本就没认出这东西原来是unicode编码,当成普通的字符序列了。
百度找到了最好的解决方法:在这个unicode串后面加上:

s = s.decode().encode(‘unicode_escape’)
print(s)

它就打印出汉字了

python3中没有这种问题,所以最简单的方法是引入__future__模块,把新版本的特性导入到当前版本

from __future__ import unicode_literals

print json.dumps(m,ensure_ascii=False)

=>{"a": "你好"}
在写入文件的时候出现了Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误

大神的解决方法:
不使用open打开文件,而使用codecs:
from __future__ import unicode_literals
import codecs
fp = codecs.open(‘output.txt‘, ‘a+‘, ‘utf-8‘)
fp.write(json.dumps(m,ensure_ascii=False))
fp.close()

原文地址:https://www.cnblogs.com/tangxiaosheng/p/12015847.html

时间: 2024-10-13 05:50:31

Python3的unicode编码转换成中文问题的相关文章

java 中文转换成Unicode编码和Unicode编码转换成中文

转自:一叶飘舟 http://blog.csdn.net/jdsjlzx/article/details/7058823 package lia.meetlucene; import java.io.IOException; import org.apache.lucene.index.CorruptIndexException; public class Unicode { public static void main(String[] args) throws CorruptIndexEx

转换编码,将Unicode编码转换成可以浏览的utf-8编码

//转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([\w]{4}))/i'; preg_match_all($pattern, $name, $matches); if (!empty($matches)) { $name = ''; for ($j = 0; $j < count($matches[0]); $j++) { $str = $matc

jmeter响应信息unicode 编码转成中文

在jmeter 发送请求过程中,有时候后台返回的是unicode 代码,如: {"status":-1,"msg":"\u63d0\u4ea4\u6570\u636e\u4e0d\u8db3"} 手动转换成中文为: {"status":-1,"msg":"提交数据不足"} 需要使用jmeter 把响应内容转换成中文显示,方便查看.思路是使用bean shell 把unicode响应结果转

JAVA unicode转换成中文

/** * * unicode 转换成 中文 * @param theString * @return */ public static String decodeUnicode(String theString) { char aChar; int len = theString.length(); StringBuffer outBuffer = new StringBuffer(len); for (int x = 0; x < len;) { aChar = theString.char

C#中文和UNICODE编码转换

C#中文和UNICODE编码转换 //中文轉為UNICODE string str = "中文"; string outStr = ""; if (!string.IsNullOrEmpty(str)) { for (int i = 0; i < str.Length; i++) { //將中文轉為10進制整數,然後轉為16進制unicode outStr += "\\u" + ((int)str[i]).ToString("x&

十六进制Unicode编码字符串与中文字符串的相互转换

图书馆客户端项目中遇到的一个问题,得到的URL 是这样的 String baseurl = "http://innopac.lib.xjtu.edu.cn/availlim/search~S1*chx?/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ&extended=0&SUBKEY=%E8%92%8B%E4%BB%

(转载)GBK、UTF8、UNICODE编码转换

GBK.UTF8.UNICODE编码转换 1 string GBKToUTF8(const std::string& strGBK) 2 { 3 int nLen = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0); 4 WCHAR * wszUTF8 = new WCHAR[nLen]; 5 MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, wszUTF8, nLen);

在C#中将金额转换成中文大写金额

具体代码如下: /// <summary> /// 金额转换成中文大写金额 /// </summary> /// <param name="LowerMoney">eg:10.74</param> /// <returns></returns> public static string MoneyToUpper(string LowerMoney) { string functionReturnValue = nu

把man手册转换成中文

1  *  Copyright (c) 2012级, 烟台大学计算机学院 2  *  All rights reserved. 3  *  作者:付记超 4  *  完成日期:2015 年 6 月 6 日 5  *  版 本 号:v1.0 6  *  学习主题:把man手册转换成中文 7  *  使用环境:红帽5.8 8  *  使用好处: 9  *  使用时间: 10 *  如何使用: 11 *  学习内容:安装man-pages中文手册包 欢迎指正 QQ:2272172668  Email: