pyefun.核心支持库.编码转换 源代码

"""

.. Hint::
    编码转换

    需要安装 chardet

    pip install chardet


.. literalinclude:: ../../../pyefun/核心支持库/编码转换_test.py
    :language: python
    :caption: 代码示例
    :linenos:
    :lines: 1-100

"""

import binascii, hashlib, base64, hmac
from urllib import parse
from .公用函数 import *
import chardet
import io


[文档]def 编码_检查(bytes): """ 检测文件编码 #Return: # fileencoding: 文件编码 # confidence: 检测结果的置信度,百分比 """ detector = chardet.detect(bytes) # confidence = detector['confidence'] if detector['encoding'] is None: detector['encoding'] = 'unknown' # confidence = 0.99 return detector['encoding']
[文档]def 文本编码转换(内容: str, 来源编码: str, 目标编码: str): if 来源编码 == "": s = 内容 来源编码 = 编码_检查(s) if 来源编码 == 目标编码: return 内容 if not (来源编码 == "gbk" or 来源编码 == "utf-8" or 来源编码 == "GB2312"): return 内容 with io.BytesIO(内容) as data: with io.TextIOWrapper(data, encoding=来源编码, errors='replace') as f: newtext = f.read().encode(encoding=目标编码) return newtext
@异常处理返回类型逻辑型 def 编码_UTF8编码(内容): return 内容.encode(encoding='UTF-8', errors='strict') @异常处理返回类型逻辑型 def 编码_UTF8解码(内容): return 内容.decode(encoding='UTF-8', errors='strict') @异常处理返回类型逻辑型 def 编码_URL编码(内容): return parse.quote(内容) @异常处理返回类型逻辑型 def 编码_URL解码(内容): return parse.unquote(内容) @异常处理返回类型逻辑型 def 编码_GBK编码(内容): return 内容.encode(encoding='GBK', errors='strict') @异常处理返回类型逻辑型 def 编码_GBK解码(内容): return 内容.decode(encoding='GBK', errors='strict') @异常处理返回类型逻辑型 def 编码_ANSI到USC2(内容): return ascii(内容) @异常处理返回类型逻辑型 def 编码_USC2到ANSI(内容): return 内容.encode('utf-8').decode('unicode_escape') @异常处理返回类型逻辑型 def 编码_BASE64编码(内容): '要编码的内容支持文本跟字节集' if type(内容) == str: return base64.b64encode(内容.encode('UTF-8')).decode("UTF-8") else: return base64.b64encode(内容).decode("UTF-8") @异常处理返回类型逻辑型 def 编码_BASE64解码(内容, 返回字节集=False): '字节集用于解码图片' if 返回字节集: return base64.b64decode(内容) else: return base64.b64decode(内容).decode("UTF-8") @异常处理返回类型逻辑型 def 加密_MD5(内容, 编码="utf-8"): MD5 = hashlib.md5() MD5.update(内容.encode(encoding=编码)) return MD5.hexdigest() @异常处理返回类型逻辑型 def 加密_SHA(内容, 方式=0): '方式: 0.SHA1 1.SHA224 2.SHA256 3.SHA384 4.SHA512' 字典 = {0: hashlib.sha1(), 1: hashlib.sha224(), 2: hashlib.sha256(), 3: hashlib.sha384(), 4: hashlib.sha512()} 字典[方式].update(str(内容).encode('utf-8')) return 字典[方式].hexdigest() @异常处理返回类型逻辑型 def 加密_SHA3(内容, 方式=0): '方式: 0.SHA224 1.SHA256 2.SHA384 3.SHA512' 字典 = {0: hashlib.sha3_224(), 1: hashlib.sha3_256(), 2: hashlib.sha3_384(), 3: hashlib.sha3_512()} 字典[方式].update(str(内容).encode('utf-8')) return 字典[方式].hexdigest() @异常处理返回类型逻辑型 def 加密_HmacSHA256(key, 内容): return base64.b64encode( hmac.new(bytes(key, encoding='utf-8'), bytes(内容, encoding='utf-8'), digestmod=hashlib.sha256).digest()).decode( "utf-8") @异常处理返回类型逻辑型 def 加密_CRC32(内容): return binascii.crc32(内容.encode("utf-8")) @异常处理返回类型逻辑型 def 进制_十到二(十进制数): """ 将十进制转换成二进制 """ return bin(十进制数) @异常处理返回类型逻辑型 def 进制_十到八(十进制数): """ 将十进制转换成八进制(返回八进制文本) """ return oct(十进制数) @异常处理返回类型逻辑型 def 进制_十到十六(十进制长整数): """ 十进制到十六进制 """ return hex(十进制长整数) @异常处理返回类型逻辑型 def 进制_二到十(二进制文本): """ 将二进制转换成十进制(返回十进制整数) """ return int(二进制文本, base=2) @异常处理返回类型逻辑型 def 进制_八到十(八进制文本:str): """ 将八进制转换成十进制(返回十进制整数) """ return int(八进制文本, base=8) @异常处理返回类型逻辑型 def 进制_十六到十(十六进制文本): return int(十六进制文本, base=16)