分享

【Python】解释器读取文件编码问题以及文本输出问题,提示报错utf-8 codec can‘t decode

 昵称21609410 2024-05-08 发布于黑龙江

前言
基于上篇文章内容,在使用python代码时,如果是初学者,很容易出现编码问题报错,以及输出文本的报错。
Python编辑器默认读取的是Unicode编码,对于Python而言,print输出方法,所有内容都应该是字符串,否则报错。

编辑器编码
python文件由于不是utf-8编码,导致运行起来时直接报错提示

SyntaxError: (unicode error) 'utf-8’ codec can’t decode byte 0xb5 in position 0: invalid start byte
SyntaxError:(unicode错误)“utf-8”编解码器无法解码位置0中的字节0xb5:无效的起始字节

可以通过下面方式把文件转为UTF-8编码,然后运行就可以显示了


需要确保Python脚本文件以UTF-8编码保存,并且终端或编辑器也能够正确地处理Unicode字符。
使用的是Python交互式解释器,通常情况下是支持Unicode字符的,只需确保你的终端也支持UTF-8编码。
如果使用的是脚本文件,可以在文件开头添加一行指定编码方式的注释:

# -*- coding: utf-8 -*-

这样做会告诉Python解释器使用UTF-8编码读取该文件。使用的是编辑器,确保你的编辑器也以UTF-8编码打开文件。

输出文本
报错提示如下

can only concatenate str (not “int”) to str
尝试将一个字符串和一个整数进行拼接,但Python不允许直接将字符串和整数进行加法操作

正确写法,直接将整型转为字符串即可

# -*- coding: utf-8 -*-

# 获取字符串的哈希值
print("第一个:"+str(hash("hello")))

# 获取整数的哈希值
print("第二个:"+str(hash(42)))

# 获取列表的哈希值(列表是不可哈希的,会抛出异常)
try:
    print("第三个:"+str(hash([1, 2, 3])))
except TypeError as e:
    print("第四个:"+"TypeError:", e)

# 获取元组的哈希值(元组是可哈希的)
print("第五个:"+str(hash((1, 2, 3))))

知识点
编码
当涉及到Python编码时,有几个重要的知识点需要了解:

1.字符串类型
Python中有两种字符串类型,即str和bytes。str是Unicode字符串,而bytes是字节字符串。在处理文本时,通常使用str类型。而在处理二进制数据(如图像、音频等)时,则使用bytes类型。

2.Unicode和编码
Unicode是一种字符集,它为世界上几乎所有的字符都定义了唯一的标识符。而编码是将Unicode字符转换为字节序列的规则。常见的编码包括UTF-8、UTF-16、UTF-32等。在Python 3中,默认的字符串类型是Unicode,并且推荐使用UTF-8编码。

3.字符串拼接
在Python中,可以使用加号(+)将两个字符串拼接在一起。但是需要注意,不能直接将字符串和其他类型(如整数、浮点数等)进行拼接,需要先将其转换为字符串类型。

4.字符串格式化
字符串格式化是一种将变量的值插入到字符串中的方法,使得字符串更具有可读性。常见的格式化方法包括format方法、f-string和%操作符。

5.文件编码
当处理文件时,特别是在读取或写入文本文件时,需要注意文件的编码格式。通常情况下,推荐使用UTF-8编码以支持更多的字符。

6.编码异常处理
在处理字符串时,可能会遇到编码相关的异常,如UnicodeError或SyntaxError。为了避免这些异常,可以在文件开头指定编码方式,或者确保所用的编辑器和终端都支持UTF-8编码。
这些知识点是Python编码中的基础,掌握它们能够帮助你更好地处理文本数据并避免常见的编码问题。

输出函数
针对上面输出文本报错情况,可以通过下面几个方式输出也是可以的。
字符串格式化允许在字符串中插入变量的值。
Python提供了几种字符串格式化的方法:
使用format方法

age = 25
message = "我今年{}岁。".format(age)
print(message)

使用f-string(Python 3.6及以上版本)

age = 25
message = f"我今年{age}岁。"
print(message)

使用%操作符

age = 25
message = "我今年%d岁。" % age
print(message)

使用类型转换
你也可以通过将整数转换为字符串,然后再拼接它们vb.net教程C#教程python教程

age = 25
message = "我今年" + str(age) + "岁。"
print(message)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lmy_520/article/details/136706767

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多