字符编码转换说明及深浅copy介绍

编码说明:

   常用编码介绍:

    ascii 数字,字母 特殊字符。
    字节:8位表示一个字节。
    字符:是你看到的内容的最小组成单位。
    abc : a 一个字符。
    中国:中 一个字符。
    a : 0000 1011

    unicode: 万国码
    起初: a : 0000 1011 0000 1011
    中: 0000 1011 0000 1111
    升级: a : 0000 1011 0000 1011 0000 1011 0000 1011
    中: 0000 1011 0000 1111 0000 1011 0000 1011

    utf-8:最少用8位表示一个字符。
    a: 0000 1011
    欧洲: 0000 1011 0000 1011
    亚洲中:0000 1011 0000 1011 0000 1011

    gbk:国标
    a: 0000 1011
    中:0000 1011 0000 1011 两个字节。

    1,不同编码之间的二进制是不能互相识别的。
    2,对于文件的存储,及传输 不能是unicode的编码。
    python3x
      int
      bool
      bytes:内部编码方式:(非unicode,utf-8,gbk.gb2312...)
      str : 内部编码方式unicode
      list
      dict
      tuple

      bytes:内部编码方式:(非unicode,utf-8,gbk.gb2312...)
      str : 内部编码方式unicode
      字母:
      str:表现形式:s1 = ‘alex‘
      内部编码:unicode

      bytes:表现形式:s2 = b‘alex‘
      内部编码:非unicode

    中文:
      str:表现形式:s1 = ‘中国‘
      内部编码:unicode

    bytes:

      表现形式:b1 = b‘\xe4\xb8\xad\xe5\x9b\xbd‘
      内部编码:非unicod

  说明:
    不同编码之间的二进制是不能互相识别的。
    对于文件的存储,及传输 不能是unicode的编码
    在python3中默认字符串编码方式是unicode,所以字符串不能直接发送和写入文件,所以需要转化。
    Bytes默认字符编码是可变得但不是unicode编码方式,但bytes与str的所有操作方式都是一样的。
    所以str想直接存储或者传输,需要将str转化成bytes再存储。

  字符间转换方式:

    存在str和bytes原因,是因为两者英文显示都是一样可以使用,但在表示中文的时候bytes可读性很差。
    所以向str转化成bytes类型使用encode(‘字符编码’)

    str转byts方法:——encode(‘字符编码’)

    bytes转回str类型(解码):——decode(‘默认可以不写’)

    bytes中文转化为其他编码方式是先转化为str后再转化为其他字符:
    str可以转化为其他编码格式,存储时候使用bytes存储,所以其他格式的字符编码想转化为其他字符,就需要先dicode转化为str然后再通过enco的将str转化为其他。

    举例:

      s1 = ‘alex‘
      # str ---> bytes encode 编码
      b1 = s1.encode(‘utf-8‘)
      print(b1)
      #bytes---> str decode 解码
      s2 = b1.decode(‘utf-8‘)
      print(s2)

      s4 = ‘中国‘
      b4 = s4.encode(‘utf-8‘) # utf-8 bytes
      print(b4) ###b‘\xe4\xb8\xad\xe5\x9b\xbd‘

      b6 = b4.decode(‘utf-8‘).encode(‘gbk‘)

      print(b6) ###b‘\xd6\xd0\xb9\xfa‘

深 浅 cop说明

  .Copy()

  对赋值运算来说,就是公用一个内存地址,两个值都是公用一个内存地址,一个变另一个也跟着变。
  .copy()复制的内容,浅copy是第一层级是相对独立,从第二层级后公用一个内存地址。
  对于深copy需要引用copy模块,inmport copy不论嵌套多少层都是使用独立的内存地址,即别人变我不变。

  浅copy:
    对于层级比较多的列表或字典的时候,第一层(最外层)是相对独立的内存地址,从第二层开始,就开始共公用一个内存地址

  深copy :
    Import copy ——引用一个copy模块

    深copy是表示不论你列表中嵌套了多少层,内存地址都是独立的。互补影响。

  举例:
    #赋值运算
    # s1 = [1, 2, 3] ####赋值运算公用一个地址
    # s2 = s1 # 共用一个
    # s1.append(666)
    # print(s1, s2)

    #浅copy
    # s1 = [1, 2, 3] ####浅copy是第一层级是相对独立
    # s2 = s1.copy()
    # s1.append(666)
    # print(s1, s2)

    # s1 = [1, 2, 3,[11,22]] ### 浅copy 第一层各自独立,从第二层开始,共用一个内存地址。
    # s2 = s1.copy()
    # s1[-1].append(666)
    # # print(s1, s2)
    # print(id(s1), id(s2))
    # print(id(s1[-1]), id(s2[-1]))

  # 深copy
    import copy ###引用copy模块
    # s1 = [1, 2, 3,[11,22]]
    # s2 = copy.deepcopy(s1)
    # s1.append(666)
    # print(s1, s2)

    # s1 = [1, 2, 3,[11,22]] ### 深copy 无论多少层,都是互相独立的。
    # s2 = copy.deepcopy(s1)
    # s1[-1].append(666)
    # print(s1, s2)

原文地址:https://www.cnblogs.com/liujiyu/p/9096420.html

时间: 2024-10-10 07:53:58

字符编码转换说明及深浅copy介绍的相关文章

Windows下字符编码转换

有时候经常使用别人用Tabhost+其它的实现demo.单纯利用Tabhost该如何使用呢? 下面看例子: public class MainActivity extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取对象 tabHost = getTabH

erlang中字符编码转换(转)

转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来对字符进行编码转换处理. 文件说明: iconv_erl.c和iconv.h 是erlang字符编码模块的driver,作用是对iconv进行封装.编译后生成iconv_erl.dll,供iconv.erl使用. iconv_makefile.win32 windows上编译iconv_erl.dl

php 字符编码转换函数 iconv mb_convert_encoding比较

在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时,可以稍微弥补一下默认缺陷,不至于无法转换是截断,用法如下 iconv(“UTF-8″,”GB2312//IGNORE”,$data) ; 这样碰到生僻字转换失败时,它就会忽略失败,继续转换下面的内容,这算解决问题的一个办法,不过为了确保转换的成功率,我们可以用另一个转换函数(mb_convert_e

iconv字符编码转换

转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以"方便"的完成几乎所有的编码转换工作.说简单是因为,它常用的接口就三个,iconv_open  iconv   iconv_close,但是即便是只有三个接口,要想使用正确也不容易.这里把一些基本概念和使用细节记录下来,希望能成为一篇最实用的

ASP中有关字符编码转换的几个有用函数

ASP中有关字符编码转换的几个有用函数 <%1.'UTF转GB---将UTF8编码文字转换为GB编码文字function UTF2GB(UTFStr) for Dig=1 to len(UTFStr)   '如果UTF8编码文字以%开头则进行转换  if mid(UTFStr,Dig,1)="%" then      'UTF8编码文字大于8则转换为汉字    if len(UTFStr) >= Dig+8 then        GBStr=GBStr & Con

php字符编码转换之gb2312转为utf8(转)

在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ( string in_charset, string out_charset, string str ) 注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符

python基础 字符编码转换

python2 1 #python2上所有的字符编码都需要先decode到unicode,再从unicode encode到目标编码 2 str_utf8 = "我就是我" 3 print("str_utf-8:我就是我:",str_utf8) 4 #将utf-8转换为unicode 5 str_utf8_to_unicode = str_utf8.decode("utf-8") 6 print(str_utf8_to_unicode) 7 #将

PHP iconv()函数字符编码转换的问题讲解_php技巧 - PHP

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 在php中iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库:但有时候iconv对于部分数据转码会无缘无故的少一些.比如在转换字符"—"到gb2312时会出错. 下面一起慢慢看一下这个函数的用法. 最简单的应用,把gb2312置换成utf-8: $text=iconv("GB2312","UTF-8",$text); 在用$text=ico

字符编码转换笔记

何为字符编码? 字符编码为计算机文字的存储格式, 例如 英文 字母 以ASCII编码存储, 即单字节存储,  其他字符编码有 UTF-8(通用字符编码格式), 其他区域性编码格式, 例如 ISO-8859(西欧), windows-1251俄文,中文GB编码. 为什么需要转换? 正因各个地区有不同的编码格式, 为了交换信息的目的, 就需要将相同字符的 从一种编码格式 转换为 另外一种编码格式. 通用的编码格式为 UTF-8, 其囊括了 世界上所有字符, 所以一般为了通用性, 文件都以UTF-8编