首页 > 其他分享 >字符编解码及其相互转换

字符编解码及其相互转换

时间:2023-07-01 14:22:05浏览次数:25  
标签:编解码 转换 string 编码 Unicode unicode 字符 字符串 ASCII

1. 获取或设置默认编解码

在 Python 中,默认编码类型是由解释器在启动时自动设置的,并且在运行过程中不可更改。但你可以在代码中显式地指定和使用特定的编码类型来处理字符串。通过设置文件头的注释添加以下内容,可以告诉解释器源代码文件的编码类型:

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

上面的示例指定了文件的编码类型为 UTF-8。

在读取和写入文件时,你可以使用 open() 函数提供的 encoding 参数来指定所需的编码类型:

1 # 以 UTF-8 编码方式读取文件
2 with open('file.txt', 'r', encoding='utf-8') as file:
3     content = file.read()
4 
5 # 以 UTF-8 编码方式写入文件
6 with open('file.txt', 'w', encoding='utf-8') as file:
7     file.write(content)

如果你需要处理标准输入、输出或错误流,可以使用 sys 模块来设置它们的编码方式:

 1 import sys
 2 
 3 # 设置标准输出编码方式为 UTF-8
 4 sys.stdout.encoding = 'utf-8'
 5 
 6 # 设置标准输入编码方式为 UTF-8
 7 sys.stdin.encoding = 'utf-8'
 8 
 9 # 设置标准错误输出编码方式为 UTF-8
10 sys.stderr.encoding = 'utf-8'

请注意,对于其他库和组件,可能有专门的方法来设置和管理编码类型。例如,在处理网络请求时,可以使用 requests 库中的 response.encoding 属性来指定响应内容的编码类型。

 

在 Python 中,你可以使用 sys 模块来获取默认的编码类型。通过访问 sys 模块的 getdefaultencoding() 函数,你可以获取当前 Python 解释器的默认编码。下面是示例代码:

import sys

default_encoding = sys.getdefaultencoding()
print(default_encoding)  # 输出默认的编码类型,如 'utf-8'

在上面的代码中,我们导入了 sys 模块,并使用 getdefaultencoding() 函数获取默认的编码类型。将默认编码类型赋值给变量 default_encoding,然后打印该变量的值即可。

需要注意的是,默认的编码类型可能因不同的操作系统和 Python 版本而有所不同。通常情况下,Python 3 的默认编码是 'utf-8'。如果你需要在你的代码中处理文本,最好明确指定编码方式,以避免出现意外的编码问题。

 

2. 编解码相互转换

字符串之间的转换可以使用 Python 的内置函数和方法来实现。下面是关于 ASCII、Unicode、UTF-8 和二进制之间转换的详细解释:

  1. ASCII 和 Unicode 之间的转换:

    • 将 ASCII 字符串转换为 Unicode 字符串:使用 str 类型的 encode() 方法,并指定目标编码类型作为参数。例如,将 ASCII 字符串转换为 Unicode 字符串可以使用 encode('unicode_escape') 方法。
    • 将 Unicode 字符串转换为 ASCII 字符串:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii'。注意,如果字符串中包含非 ASCII 字符,转换将会失败,这时需要处理编码错误。
    • 将 Unicode 字符串转换为 ASCII 字符串并忽略非 ASCII 字符:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii',并设置 errors 参数为 'ignore'。这样会忽略字符串中的非 ASCII 字符。
    • 将 Unicode 字符串转换为 ASCII 字符串并替换非 ASCII 字符:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii',并设置 errors 参数为 'replace'。这样会将非 ASCII 字符替换为 '?'。
    • 将 Unicode 字符串转换为 ASCII 字符串并使用 XML 实体替换非 ASCII 字符:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii',并设置 errors 参数为 'xmlcharrefreplace'。这样会将非 ASCII 字符替换为相应的 XML 实体。
  2. Unicode 和 UTF-8 之间的转换:

    • 将 Unicode 字符串转换为 UTF-8 字符串:使用 str 类型的 encode() 方法,并指定目标编码类型为 'utf-8'。
    • 将 UTF-8 字符串转换为 Unicode 字符串:使用 bytes 类型的 decode() 方法,并指定源编码类型为 'utf-8'。
  3. 字符串和二进制之间的转换:

    • 将字符串转换为二进制:使用 bytes 类型的 encode() 方法,并指定目标编码类型。例如,将字符串转换为 UTF-8 编码的二进制可以使用 encode('utf-8') 方法。
    • 将二进制转换为字符串:使用 bytes 类型的 decode() 方法,并指定源编码类型。
       1 示例:演示了 ASCII、Unicode、UTF-8 和二进制之间的相互转换
       2 
       3 # ASCII 转换为 Unicode
       4 ascii_string = 'Hello'
       5 unicode_string = ascii_string.encode('unicode_escape').decode('unicode_escape')
       6 print(unicode_string)  # 输出 'Hello'
       7 
       8 # Unicode 转换为 ASCII
       9 unicode_string = 'Hello'
      10 ascii_string = unicode_string.encode('ascii', errors='ignore').decode('ascii')
      11 print(ascii_string)  # 输出 'Hello'
      12 
      13 # Unicode 转换为 UTF-8
      14 unicode_string = '你好'
      15 utf8_string = unicode_string.encode('utf-8')
      16 print(utf8_string)  # 输出 b'\xe4\xbd\xa0\xe5\xa5\xbd'
      17 
      18 # UTF-8 转换为 Unicode
      19 utf8_string = b'\xe4\xbd\xa0\xe5\xa5\xbd'
      20 unicode_string = utf8_string.decode('utf-8')
      21 print(unicode_string)  # 输出 '你好'
      22 
      23 # 字符串转换为二进制
      24 string = 'Hello'
      25 binary = string.encode('utf-8')
      26 print(binary)  # 输出 b'Hello'
      27 
      28 # 二进制转换为字符串
      29 binary = b'Hello'
      30 string = binary.decode('utf-8')
      31 print(string)  # 输出 'Hello'
      32 
      33 # ASCII 转换为 Unicode   指定编码类型:先编码后解码
      34 ascii_string = 'Hello'
      35 unicode_string = ascii_string.encode('unicode_escape').decode('unicode_escape')
      36 print(unicode_string)  # 输出 'Hello'
      37 
      38 # Unicode 转换为 ASCII
      39 unicode_string = 'Hello'
      40 ascii_string = unicode_string.encode('ascii', errors='ignore').decode('ascii')
      41 print(ascii_string)  # 输出 'Hello'
      42 
      43 # Unicode 转换为 UTF-8
      44 unicode_string = '你好'
      45 utf8_string = unicode_string.encode('utf-8')
      46 print(utf8_string)  # 输出 b'\xe4\xbd\xa0\xe5\xa5\xbd'
      47 
      48 # UTF-8 转换为 Unicode
      49 utf8_string = b'\xe4\xbd\xa0\xe5\xa5\xbd'
      50 unicode_string = utf8_string.decode('utf-8')
      51 print(unicode_string)  # 输出 '你好'
      52 
      53 # 字符串转换为二进制:只编码,不解码就是二进制了
      54 string = 'Hello'
      55 binary = string.encode('utf-8')
      56 print(binary)  # 输出 b'Hello'
      57 
      58 # 二进制转换为字符串
      59 binary = b'Hello'
      60 string = binary.decode('utf-8')
      61 print(string)  # 输出 'Hello'

       

标签:编解码,转换,string,编码,Unicode,unicode,字符,字符串,ASCII
From: https://www.cnblogs.com/allenxx/p/17519233.html

相关文章

  • 字符编解码
    什么是字符编码&解码字符编码字符编码是将字符转换为二进制表示的过程。它是为了能够在计算机系统中处理和存储文本而创建的一种方式。由于计算机只能理解二进制数据,需要将字符转换为相应的二进制编码形式才能进行处理。字符解码字符解码是将二进制数据转换回字符的过程。它......
  • mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导
    mysql联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索那就是主表和从表的关联字段的编码方式不一样!!!产生的现象:解决之后,正确的使用了t2.order_noref索引,而不是ALL检查mysql主体编码方式,是否由于后来新建的表的关联字段和之前的主表的......
  • 位,字节,字符
    位,字节,字符位(bit):是计算机内部储存的最小单位字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母B来表示1B(byte,字节)=8bit(位)字符:指计算机中使用的字母,数字,字和符号1bit表示1位1B=8b1KB=1024B1M=1024KB1G=1024MJava中单个字符用单引号,字符串用双引号......
  • 字符串在货币、日期、精度的处理
    1.区域设置--locale模块的setlocale函数区域设置是一个标识特定地理、文化和语言的系统参数。它影响如日期和时间格式、货币和数字格式以及其他地域相关的操作。在Python中,使用 locale.setlocale() 函数可以设置区域设置来适应不同的地区和语言要求。该函数的语法为:local......
  • 2023ACM暑假训练day 6-字符串
    目录DAY6字符串训练情况简介题DAY6字符串训练地址:传送门训练情况简介题题意:思路:......
  • 字符串格式化
    1.什么是字符串格式化?就是把字符串弄成⼀定的格式(往往就是留个位置,往里面填值)这个位置往往是格式符、占位符。2.字符串常见的3种格式化方式2.1格式符+%+变量/表达式2.2f'{变量或表达式}'也叫 f-strings 2.3 字符串对象的 format() 方法来格式化字符串3.格式......
  • VisionPro学习笔记(2)——图像转换工具ImageCovertTool
    众所周知,VisionPro是一款功能强大的机器视觉软件,用于开发和部署机器视觉应用程序。其中ImageConvertTool是其中一个重要的工具,用于图像转换和处理。本文将介绍如何使用ImageConvertTool进行图像转换,并探讨其背后的原理。写之前先吐槽一下,引出自己的原因,哈哈哈(当然一个小......
  • [转]前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &quot
    1、问题:前台数据,JSON字符串带有引号“”,数据被传递到后台,引号被转义为&quot,后台无法解析。前台数据如下:正常后台数据如下:大部分正常,只有JSON字符串中的“”被转义为&quot2、解决:方法一:使用apache的lang包里的方法StringappJson=StringEscapeUtils.un......
  • 光脚丫学LINQ(010):将内存中的对象转换为XML
    视频演示:http://u.115.com/file/f24db1fdfa 通过LINQ查询,可以轻松地在内存中的数据结构、SQL数据库、ADO.NET数据集和XML流或文档之间转换数据。下面的示例将内存中的数据结构中的对象转换为XML元素。List<Student>Students=newList<Student>(){newStudent{......
  • Oracle CONNECT BY根据特定字符拆分字符串
    1、一行SELECTT.ID,REGEXP_SUBSTR(T.VALS,'[^,]+',1,LEVEL)ASVALFROM(SELECT'101'ID,'A,B'VALSFROMDUAL)TCONNECTBYLEVEL<=REGEXP_COUNT(T.VALS,'[^,]+');2、多行2-1、如果ID唯一不重复:SELECTT.ID,REGEXP_SUBSTR......