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日志打印出错...相关推荐

  1. java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

    java中转json字符串 在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON. ...

  2. python列表查找相同字符串_从Python列表中查找输入字符串的所有紧密匹配项

    假设我们给了一个单词,我们想找到它最接近的匹配项.不是完全匹配,而是其他单词在模式上与给定单词非常相似.为此,我们使用一个名为difflib的模块,并使用其名为get_close_matches的方法 ...

  3. 成功解决Python中导出图片出现错误SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position

    成功解决Python中导出图片出现错误SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position ...

  4. python中输入字符串_简单讲解Python中的字符串与字符串的输入输出

    简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...

  5. java字符乱码问题_怎么解决java中的字符乱码问题

    怎么解决java中的字符乱码问题 发布时间:2020-06-28 14:53:09 来源:亿速云 阅读:108 作者:Leah 怎么解决java中的字符乱码问题?相信很多没有经验的人对此束手无策,为此 ...

  6. java中井号字符串_深入Java基础(二)——字符串

    这段时间在准备找一份java实习工作,所以来把基础知识整理归纳一下 文章结构: 1.equals和== 2.字符串的基本知识以及字符串的源码解读: 3.字符串的注意点以及使用推荐: 一.equals和 ...

  7. java http请求 乱码_怎么解决java中的http请求乱码

    怎么解决java中的http请求乱码 发布时间:2020-06-23 20:00:11 来源:亿速云 阅读:90 作者:元一 怎么解决java中的http请求乱码?针对这个问题,今天小编总结了这篇文章 ...

  8. [转载] python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法

    参考链接: Python中字符串string capitalize 字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串 ...

  9. mysql中转换成字符串_如何在R中转换字符串的大小写?

    mysql中转换成字符串 Hello, folks. In this tutorial we are going to convert the case of the string in R. The ...

最新文章

  1. Android客户端开发—数据库SQLite基本语句
  2. 超级寒潮考验智慧城市万亿投资
  3. html5-----2
  4. Java Web Jsp
  5. 再见李佳奇,菜鸟哥用Python也能帮小姐姐选择口红啦,快来看看!!
  6. 轻松搞定RocketMQ入门 1
  7. 【Kafka】kafka消费报错 no brokers found in zk
  8. line java_java – Line Rasterization / 4-bresenham
  9. MySQL8.0.22解压安装教程
  10. 指定decode_responses=True,连接redis存的数据是字符串格式
  11. 最新小象学院python量化交易项目实战(完整)
  12. 编写类的步骤编写测试类
  13. Java-根据IP获取对应位置信息
  14. Android高级工程师面试必备之计算机网络基础,android体系架构
  15. python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结
  16. 如何写好技术部门的年度 OKR
  17. 基于openstack安装部署私有云详细图文教程
  18. 解决阿里云windows服务器无法连接远程桌面
  19. 基于ILP的最优PMU放置优化研究(Matlab代码实现)
  20. U8销售出库单API接口 --参照发货通知单

热门文章

  1. ORACLE中的异常处理
  2. 【转】Android加密算法:AES、Base64加密算法
  3. Linux文件系统中的链接
  4. js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)
  5. android下获取无线wif信号、ssid、MAC等操作类
  6. centos yum 安装python3.6+pip
  7. c#语言中的变量名,在C#中创建动态变量名
  8. 随便选一张扑克牌_扑克牌魔术手法教学,简单易学的纸牌魔术,三分钟让你成为大师...
  9. Java四大函数式接口
  10. 【OS学习笔记】三十八 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----微型内核汇代码