让Vim能正确显示和保存各种编码文件内容是个头疼的事情,今天专注的把这个问题研究一下
最近用python做不少整理数据的工作,其中就包含不少关于中文处理的,所以总总结一下方便以后使用
SQL Server中涉及到中文的缺省字符集是CP936,所以将charset配置为CP936,就解决了中文乱码的问题。
在很多项目里,或者一些应用上,我们经常需要把一些文件导入到SAP系统里,最经常我们使用的读取数据的方法就是使用GUI_UPLOAD这个FM.在这个FM中有个CODEPAGE,是用来指定代码页的. 如果我们导的是中文的话,我们经常使用的是8400.当然还有8401,8411等等. 主要介绍一下8400/8401.因为大家最常用的是8400.看8400的介绍上说,是based on GB2312-EUC版本,WINDOWS的代码页就是CP936.8401使用的就是GB18030 2000编码.那么他们的区别在哪里呢. 1、 GB2312 GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。 在windows中的代码页是CP936 2、 GBK GBK最初是由微软对GB2312的扩展,也就是CP936字码表 (Code Page 936)的扩展(原来的CP936和GB 2312-80一模一样),最初出现于Windows 95简体中文版中,由于Windows产品的流行和在大陆广泛被使用,中华人民共和国国家有关部门将其作为技术规范。注意GBK并非国家正式标准,只是国家技术监督局标准化司、电子工业部科技与质量监督司发布的“技术规范指导性文件”。虽然 GBK收录了所有Unicode 1.1及GB 13000.1-93之中的汉字,但是编码方式与Unicode 1.1及GB 13000.1-93不同。仅仅是GB 2312到GB 13000.1-93之间的过渡方案。GBK收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。 GBK作为对GB2312的扩展,在现在的windows系统中仍然使用代码页CP936表示,但是同样的936的代码页跟一开始的936的代码页只支持GB2312编码不同,现在的936代码页支持GBK的编码,GBK同时也向下兼容GB2312编码。 3、 GB18030 2000年的GB18030取代了GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。 GB18030在windows中的代码页是CP54936。 4、 GB13000 GB13000等同于国际标准的《通用多八位编码字符集 (UCS)》 ISO10646.1,就是等同于Unicode的标准,代码页等等的都使用UTF的一套标准。 从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
# -*- coding: CP936 -*- import subprocess cmd="cmd.exe" begin=101 end=110 while begin<end: #reload(sys) #sys.setdefaultencoding('CP936') p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE) p.stdin.write
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进
Python 2.x 里的编码实在是一件令人烦躁的事情。不断有初学者被此问题搞得晕头转向。我自己也在很长一段时间内深受其害,直到现在也仍会在开发中偶尔被坑。在本教室的提问和讨论中,编码问题也占据了相当大的比重。 然而这个问题并不能一两句话轻易解答。今天在这里稍微分析一下,希望能帮各位理清这里面的问题。 要弄清编码问题,首先明确几个概念: str、unicode、encode、decode str 就是我们通常说的字符串,在 python 中是由引号包围的一串字符。但是 Python 中的默认字符并不包括中文
最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII采用1个字节来对字符进行编码,最多只能表示256个符号。 随着信息技术的发展和信息交换的需要,各国的文字都需要进行编码,不同的应用领域和场合对字符串编码的要求也略有不同,于是又分别设计了多种不同的编码格式,常见的主要有UTF-8、UTF-16、UTF-32、GB2312、GBK、CP936、base64、CP437等等。UTF-8编码是国际通用的编码,以1个字节表示英语字
python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]。 而python中的unicode对象应该才是等同于java中的String对象,或本质上是java的char[]。 对于
1、设置PyCharm工具的编码格式:File--》setting--》Editor--》FileEncodings--》IDE encoding:utf-8 2、在PyCharm模块文件的第二行加入语句:#-*-coding:utf-8-*- 3、在File--》Setting--》File and CodeTemplates模块里加入下面的语句:
近日用Python写一个小程序,从数据库(MS SQL)中读取数据,对数据进行组织后发送到邮箱,在数据内容有中文的地方始终报错,汉字使用UTF-8进行编码倒是不报错了,但发送到邮箱的内容,从数据库中读取出来的汉字却成乱码了,经多方查找资料,把文件的编码设置为cp936(即#coding=cp936),然后在发送邮件时使用gb2312编码,搞定!
转自:链接 python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]。 而python中的unicode对象应该才是等同于java中的String对象,或本质上是java的char[]。 对于 :
一 、mount命令(用来挂载硬盘或镜像等) 用法:mount [-t vfstype] [-o options] device dir 1、-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: DOS fat16文件系统:msdos Windows 9x fat32文件系统:vfat Windows NT ntfs文件系统:ntfs Windows网络文件共享:smbfs (默认的windows系统都支持的) windows网络共享文件:cifs (cif
什么是多字节的字符串操作呢?其实不少的同学可能都已经使用过了,但我们还是要从最基础的问题说起。
# -*- coding: cp936 -*- import os,sys,re def lastline(): global pos while True: pos = pos - 1 try: f.seek(pos, 2) #从文件末尾开始读 if f.read(1) == '\n': break except: #到达文件第一行,直接读取
zip格式中并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时出现乱码问题,因为Linux下的默认编码是UTF8。
在mkv上按右键,然后选择 打开方式 使用其他程序打开 ,然后选择 使用自定义命令 ,输入 /usr/bin/mplayer -zoom -keepaspect -fontconfig -font “文泉驿正黑” -sid 0 -subcp cp936,后面的-fs看自己的需要,可加可不加 好了,现在打开mkv,用右键选择输入的方式,就可以了。
在我和实际使用中,字符集用utf8效果很好,没有出现乱码的问题,在终端挂载的代码如下: mount -t vfat /dev/hda2 /mnt/d -o codepage=936,iocharset=utf8 我的fstab # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/hdc8 / ext3 defaults,errors=remount-ro 0 1 /dev/hdc9 none swap sw 0 0 /dev/hdb /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/hdc1 /mnt/winc vfat defaults,codepage=936,iocharset=utf8 0 0 /dev/hdc5 /mnt/wind ntfs defaults,iocharset=utf8,umask=0222 0 0 /dev/hdc6 /mnt/wine ntfs defaults,iocharset=utf8,umask=0222 0 0 /dev/hdc7 /mnt/winf vfat defaults,codepage=936,iocharset=utf8 0 0 (以下转自网络) 1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内 容将不可用。 对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作 系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是 fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和 windowsXP是fat16、fat32、NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。 挂载时使用mount命令: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有 -t<文件系统类型> 指定设备的文件系统类型,常见的有: minix linux最早使用的文件系统 ext2 linux目前常用的文件系统 msdos MS-DOS的fat,就是fat16 vfat windows98常用的fat32 nfs 网络文件系统 iso9660 CD-ROM光盘标准文件系统 ntfs windows NT 2000的文件系统 hpfs OS/2文件系统 auto 自动检测文件系统 -o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有 codepage=XXX 代码页 iocharset=XXX 字符集 ro 以只读方式挂载 rw 以读写方式挂载 nouser 使一般用户无法挂载 user 可以让一般用户挂载设备 提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存 在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?) 例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。 # mk /mnt/winc # mk /mnt/floppy # mk /mnt/cdrom # mount -t vfat /dev/hda1 /mnt/winc # mount -t msdos /dev/fd0 /mnt/floppy # mount -t iso9660 /dev/cdrom /mnt/cdrom 现在就可以进入/mnt/winc等目录读写这些文件系统了。 要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常随时 更换的话,我想就不会犯这样的错误了 :-> ) 如果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要 用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代 码是936;io
补充知识:Python获取当前执行文件,根据某一级目录名称,获取此目录名称所在的绝对路径
创建镜像后如果快速运行镜像,docker run 有很多参数,只有少部分会修改,如果每天创建很多容器,每次都完整输入一次命令就很麻烦,容易出错,这时我们可以写一个 shell 脚本,把会修改的值变成参数,然后运行脚本的时候传递会变的参数即可。
师兄在 windows 下写的一段程序 (C/C++ 编写), 传给我在 Linux 下面运行, 编译和运行的时候输出的时候中文乱码了
# coding:gbk import sys import locale def p(f): print '%s.%s(): %s' % (f.__module__, f.__name__, f()) # 返回当前系统所使用的默认字符编码 p(sys.getdefaultencoding) # 返回用于转换Unicode文件名至系统文件名所使用的编码 p(sys.getfilesystemencoding) # 获取默认的区域设置并返回元祖(语言, 编码) p(locale.getdef
在看了很多的博客文章之后,总结整理得到了以下文章,非常感谢这些无私奉献的博主! 文章末尾有本文引用的文章的链接,如果有漏掉的文章引用,可以发邮件联系我,随后再次附上链接! 侵删!!! 这一部分是下篇,主要讲的是编码部分,以及在python中会遇到的一些编码问题,偏向于实际应用一点。 上篇介绍了字符、字符集的一些概念,以及他们在python中的一些简单的代码示例,偏向于概念。 上篇地址:http://www.cnblogs.com/echo-coding/p/7435118.html 这绝对是个源
“我问 Crossin” 栏目会整理一些读者经常会问到的问题,统一作答。有比较具体的编程细节,也会有一些方向的建议,以及学习经验、编程小技巧的分享。 大家有想问的问题可以直接在本栏目文章下留言。当然因为微信留言的行式和长度有限,如果是具体的问题,请加我们的交流群组或在论坛上发帖附上详细的代码和报错信息。 1. python 3 里的 print 如何输出之后不换行? 方法一:end 参数 print('hello', end=' ') print('world') 方法二:在同一个 print 语句中输出多
如前所述,在全世界所有国家和民族的文字符号统一编码的Unicode编码方案问世之前,各个国家、民族为了用计算机记录并显示自己的字符,都在ASCII编码方案的基础上,设计了各自的编码方案。
下面我们来共享群组可读写文件夹,假设你要共享的文件夹为: /home/ray/share
Vim有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding(这些选项设置请参考Vim文档中encoding-names章节),它们的意义如下:
我准备了2个版本,第一个版本是直接使用的,第二个版本是有操作可视化关闭按钮的,但是我用递归写的,关闭起来比较麻烦。
源于GBK字符集和Unicode字符集之间的转换问题。Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER。那么U+FFFD的UTF-8编码出来,恰好是 ‘\xef\xbf\xbd’。如果这个’\xef\xbf\xbd’,重复多次,例如 ‘\xef\xbf\xbd\xef\xbf\xbd’,然后放到GBK/CP936/GB2312/GB18030的环境中显示的话,一个汉字2个字节,最终的结果就是:锟斤拷——锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。
原文:http://demi-panda.com/2012/12/26/vim-encoding/
中途经过了好几天都没有动手了,得坚持下去啊 刚看了Alex老师的视频,其中有个题目如下: 编写登录接口 -输入用户密码 -认证成功后显示欢迎信息 -输错三次后锁定 # -*- coding: cp936 -*- #用户名保存在一个文件名为user.txt文件中 import os,string tmp=file('C:\Users\hityxg\Desktop\user.txt') username=file('C:\Users\hityxg\Desktop\username.txt','w') b=t
在字符与字节之间的转换过程称为编解码,Python自带了超过100种编解码器,比如:
linux解压文件中包含中文的图片会乱码 unzip -O CP936 yancao.zip 嗯,是的,得这样,但是得140个字 嗯,是的,得这样,但是得140个字 嗯,是的,得这样,但是得140个字 嗯,是的,得这样,但是得140个字 嗯,是的,得这样,但是得140个字 嗯,是的,得这样,但是得140个字 嗯,是的,得这样,但是得140个字
SyntaxError: Non-ASCII character '\xe2' in file意思是说,在文件中存在非ASCII字符; ASCII是8位即一个字符,一共256个字符,随着计算机的发展,现在已经用到2个或者4个字符; 建议在【文件头】追加: 123# -*- coding: cp936 -*-或者# -*- coding: utf-8 -*-或者#coding=utf-8 更复杂的形式要进行编码和解码。
以centos为例,执行yum install -y vim后,打开php、py等文件,发现中文乱码了。。。
pip是Python的包管理工具,使用pip可以给Python装第三方的库。昨天的推送,包括今天的第二条推送中都介绍了怎么配置pip,那么怎么使用pip来装包呢? 还有就是:遇到了问题应该怎么处理呢?
英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够了(2^8 = 256)。但其他一些文字不止这么多字符,比如中文中的汉字就多达10多万个,一个字节只能表示256个字符,肯定是不够的,因此只能使用多个字节来表示一个字符。
unzip 直接解压 .zip 压缩包,如果有中文文件名则会乱码。网上大多数解决是
>>> a = [0,1,2,3,0,0,3] >>> for item in a : print item a.remove(item) print a 输出: 0 [1, 2, 3, 0, 0, 3] 2 [1, 3, 0, 0, 3] 0 [1, 3, 0, 3] 3 [1, 0, 3] 解决方式: # -*- coding: cp936 -*- list1=[1,2,3,4,5] list2=list1[:] #复制一个才能有想像中的效果
cnstr就是你的中文字符串,做一下判断:如果是unicode,直接转码,如果不是,先解码再转码(解码前要知道你的字符串是什么编码)。
打开一个py文件hello.py 点工具-->编译系统-->python3_run
#!TestFile.py # -*- coding: cp936 -*- poem='''\ Programming is fun When the work is done if you want make your work also fun: user Python! ''' f=file('D:\\poem.txt','w')#如果不指定路径则默认保存在该代码所保存的文件目录下 f.write(poem
这是我以前写过的一个清除备份文件的小程序,本来想用批处理来做,但批处理的语法又复杂有怪异,最终还是拿python写了一个
在windows CMD中输出中文是比较烦的事情,最简单的就是增加一个windows.py,用的时候import一下: #!/usr/bin/env python # -*- coding: utf-8 -*- import sys class UnicodeStreamFilter: def __init__(self, target): self.target = target self.encoding = 'utf-8' self.erro
成功打开文件之后,可以调用文件对象本身拥有的属性获取当前文件的部分信息,其常见的属性为:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100615.html原文链接:
这个环境问题比较简单了,直接切换设置的python的执行者就可。(注意python是设置了环境变量的,如果没有,下面的 cmd 需要带入全路径即可。)
从linux内核2.4.0以后mount支持mount --bind 一个目录到另外一个目录
sublime3汉化版下载地址:http://www.cr173.com/soft/55484.html 1、 打开sublimeText 在菜单栏找到工具——>编译系统——>新编译系统
有时候你想给你的程序添加桌面快捷方式,但却连桌面的准确路径都不知道,还好微软的API给出了一些特殊文件夹路径的获取方法,再利用python的win32com模块(非标准库)即可在python中实现同样的操作!
领取专属 10元无门槛券
手把手带您无忧上云