python3 unicode字符串_【已解决】Python3中如何声明字符串是unicode类型以避免log日志打印出错...
Python3中代码:
CreateTableSqlTemplate = """CREATE TABLE IF NOT EXISTS `%s` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自增,主键’,
`cityDealerPrice` int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘经销商参考价’,
`msrpPrice` int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘厂商指导价’,
`mainBrand` char(20) NOT NULL DEFAULT ” COMMENT ‘品牌’,
`subBrand` varchar(20) NOT NULL DEFAULT ” COMMENT ‘子品牌’,
`brandSerie` varchar(20) NOT NULL DEFAULT ” COMMENT ‘车系’,
`brandSerieId` varchar(15) NOT NULL DEFAULT ” COMMENT ‘车系ID’,
`model` varchar(50) NOT NULL DEFAULT ” COMMENT ‘车型’,
`modelId` varchar(15) NOT NULL DEFAULT ” COMMENT ‘车型ID’,
`modelStatus` char(5) NOT NULL DEFAULT ” COMMENT ‘车型状态’,
`url` varchar(200) NOT NULL DEFAULT ” COMMENT ‘车型url’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""
logging.info("config=%s, needCreateTable=%s, tableName=%s, createTableSqlTemplate=%s",
config, needCreateTable, tableName, createTableSqlTemplate)
结果出错:
Traceback (most recent call last):
File "/usr/local/Cellar/python/3.6.4_4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/logging/__init__.py", line 994, in emit
stream.write(msg)
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 334-338: ordinal not in range(128)
然后
试了试:
logging.info("createTableSqlTemplate=%s", createTableSqlTemplate.encode("utf-8"))
结果:
createTableSqlTemplate=b"CREATE TABLE IF NOT EXISTS `%s` (….
输出了bytes,是不会出错,但是输出到都是\xxxx,不方便查看原始内容了。
然后也试了试加u前缀:
CreateTableSqlTemplate = u"""CREATE TABLE IF NOT EXISTS `%s` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自增,主键’。。。。"""
问题依旧。
所以想要搞清楚Python3中,如何声明是unicode字符串
python 3 unicode string
python 3 declare unicode string
试试:
logging.info("createTableSqlTemplate=%s", str(createTableSqlTemplate))
结果问题依旧。
试试:
CreateTableSqlTemplate = b”""xxx""".decode("utf-8")
结果:
SyntaxError: bytes can only contain ASCII literal characters.
试试:
CreateTableSqlTemplate = “""xxx""".encode("utf-8").decode("utf-8")
结果:
问题类似:
Traceback (most recent call last):
File "/usr/local/Cellar/python/3.6.4_4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/logging/__init__.py", line 994, in emit
stream.write(msg)
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 152-156: ordinal not in range(128)
貌似出错的position位置变了?
python 3 UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position ordinal not in range(128)
此处Python文件最开始已经指明文件编码为utf-8了:
#!/usr/bin/python
# -*- coding: utf-8 -*-
且文件本身的确是utf-8编码:
要用到PYTHONIOENCODING?
感觉不太对
试试:
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=’utf-8′)
结果问题依旧。
试试:
CreateTableSqlTemplate = str(“""xxx""")
结果:
问题依旧。
此处,好像是这个中文的逗号:
导致出错的。
-》当然可以直接删除掉,但是不是好的做法。
还是希望此处可以正常输出这个逗号的。
去给PyCharm的debug加上:
PYTHONIOENCODING=utf-8
试试
结果:
没法允许。去加上环境变量中:
问题依旧。
去给filehandler中加上编码
logging.basicConfig(
level = fileLogLevel,
format = fileLogFormat,
datefmt = fileLogDateFormat,
filename = logFilename,
encoding = "utf-8",
filemode = ‘w’)
结果:
ValueError: Unrecognised argument(s): encoding
python 3 logging.basicConfig encoding
没有提到encoding或encode
说是不要用basicConfig,换成logging.FileHandler,自己设置文件编码
然后试试自己使用fileHandler
rootLogger = logging.getLogger()
rootLogger.setLevel(fileLogLevel)
fileHandler = logging.FileHandler(
filename=logFilename,
mode=’w’,
encoding="utf-8")
fileHandler.setFormatter = logging.Formatter(
fmt=fileLogFormat,
datefmt=fileLogDateFormat
)
rootLogger.addHandler(fileHandler)
结果:
就可以正常打印log了:
【总结】
此处Python3中,对于定义好了的一个字符串:
someStr = """xxx"""
其中xxx中包含了一个中文的逗号,然后去logging去打印日志,然后出错:
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 334-338: ordinal not in range(128)
最后确定根本原因是:
初始化logging时,用的是basicConfig,不支持指定文件编码
导致默认fileHandler的文件编码(估计)是ASCII,然后无法输出此处中文字符
解决办法是:
设置logging的fileHandler的(文件的)encoding
具体做法:
rootLogger = logging.getLogger()
rootLogger.setLevel(fileLogLevel)
fileHandler = logging.FileHandler(
filename=logFilename,
mode=’w’,
encoding="utf-8")
fileHandler.setFormatter = logging.Formatter(
fmt=fileLogFormat,
datefmt=fileLogDateFormat
)
rootLogger.addHandler(fileHandler)
然后即可正常输出日志。
python3 unicode字符串_【已解决】Python3中如何声明字符串是unicode类型以避免log日志打印出错...相关推荐
- java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧
java中转json字符串 在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON. ...
- python列表查找相同字符串_从Python列表中查找输入字符串的所有紧密匹配项
假设我们给了一个单词,我们想找到它最接近的匹配项.不是完全匹配,而是其他单词在模式上与给定单词非常相似.为此,我们使用一个名为difflib的模块,并使用其名为get_close_matches的方法 ...
- 成功解决Python中导出图片出现错误SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position
成功解决Python中导出图片出现错误SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position ...
- python中输入字符串_简单讲解Python中的字符串与字符串的输入输出
简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...
- java字符乱码问题_怎么解决java中的字符乱码问题
怎么解决java中的字符乱码问题 发布时间:2020-06-28 14:53:09 来源:亿速云 阅读:108 作者:Leah 怎么解决java中的字符乱码问题?相信很多没有经验的人对此束手无策,为此 ...
- java中井号字符串_深入Java基础(二)——字符串
这段时间在准备找一份java实习工作,所以来把基础知识整理归纳一下 文章结构: 1.equals和== 2.字符串的基本知识以及字符串的源码解读: 3.字符串的注意点以及使用推荐: 一.equals和 ...
- java http请求 乱码_怎么解决java中的http请求乱码
怎么解决java中的http请求乱码 发布时间:2020-06-23 20:00:11 来源:亿速云 阅读:90 作者:元一 怎么解决java中的http请求乱码?针对这个问题,今天小编总结了这篇文章 ...
- [转载] python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法
参考链接: Python中字符串string capitalize 字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串 ...
- mysql中转换成字符串_如何在R中转换字符串的大小写?
mysql中转换成字符串 Hello, folks. In this tutorial we are going to convert the case of the string in R. The ...
最新文章
- Android客户端开发—数据库SQLite基本语句
- 超级寒潮考验智慧城市万亿投资
- html5-----2
- Java Web Jsp
- 再见李佳奇,菜鸟哥用Python也能帮小姐姐选择口红啦,快来看看!!
- 轻松搞定RocketMQ入门 1
- 【Kafka】kafka消费报错 no brokers found in zk
- line java_java – Line Rasterization / 4-bresenham
- MySQL8.0.22解压安装教程
- 指定decode_responses=True,连接redis存的数据是字符串格式
- 最新小象学院python量化交易项目实战(完整)
- 编写类的步骤编写测试类
- Java-根据IP获取对应位置信息
- Android高级工程师面试必备之计算机网络基础,android体系架构
- python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结
- 如何写好技术部门的年度 OKR
- 基于openstack安装部署私有云详细图文教程
- 解决阿里云windows服务器无法连接远程桌面
- 基于ILP的最优PMU放置优化研究(Matlab代码实现)
- U8销售出库单API接口 --参照发货通知单
热门文章
- ORACLE中的异常处理
- 【转】Android加密算法:AES、Base64加密算法
- Linux文件系统中的链接
- js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)
- android下获取无线wif信号、ssid、MAC等操作类
- centos yum 安装python3.6+pip
- c#语言中的变量名,在C#中创建动态变量名
- 随便选一张扑克牌_扑克牌魔术手法教学,简单易学的纸牌魔术,三分钟让你成为大师...
- Java四大函数式接口
- 【OS学习笔记】三十八 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----微型内核汇代码