• 字符编码


    字符编码是个很大的概念,网上有很多讲解,但有个容易忽略的点,这里补充一下:

    是以什么编码存和以什么编码读,是不一样的

    从一个小问题出发:

    以windows记事本为例,在记事本输入“联通”两个字,以ANSI编码保存,关闭再打开,就变成了乱码

    原因:

    事实上,我们的记事本指定以什么编码存储文件之后,就直接转换成对应的二进制数保存在文件中,并没有一个内置信息说明该文件是以什么编码存储的,这就导致下次再打开时,根本不知道上次保存是什么编码保存到,并没有记录,只能计算机自己去认这些内容的二进制数据,再来“猜”它是什么编码。

    而“联通”这两个字的ANSI编码(在中国大陆是gbk编码),刚好长得很像uft-8的编码,所以计算机猜成了utf-8的编码,解码按照uft-8来解码,导致了乱码。

    python2中,为了避免像记事本这种“存的时候知道以什么编码存,但读的时候不知道以什么编码读”这种问题,所以需要手动指定读编码的格式

    比如 # -*- coding: utf-8 -*-   ,若不指定,则python2默认以ASCII码读,python3默认以utf-8编码来读(此处说的以什么方式读,指的读代码的源文件,因为代码也是一种文本,需要指定编码方式)

    如果是对文件操作,例如读一个文件 f = open('file', 'r', encoding='utf-8') ,指的是用uft-8来读这个文件。  注意的是,这里的encoding和# -*- coding: utf-8 -*-完全是两个东西,它们功能不同,一个指定文件编码,一个指定代码的编码,是不同东西不要弄混了

  • 相关阅读:
    java基础之冒泡排序和选择排序
    从今天开始写博客、托管代码到 Github
    九度 Online Judge 之《剑指 Offer》一书相关题目解答
    Window.ShowModalDialog使用手册
    模态窗体刷新父窗体
    彻底卸载sql2008后重新安装
    servlet 学习笔记(二)
    查看本地安装的sql server是什么版本
    servlet 学习笔记(三)
    struts2 国际化
  • 原文地址:https://www.cnblogs.com/jx-z/p/10204790.html
Copyright © 2020-2023  润新知