python代码编码成jni_python 设置文件编码格式的实现方法

如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。(python3已经没有这个问题了,python3默认的文件编码是UTF-8)

必须将编码注释放在第一行或者第二行,一般来说,Python文件的前两行要这样写:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

其中第一行是指定python解释器,第二行是指定python文件编码方式,设置编码方式有以下可选的方法

1. 带等号的设置方法:

#!/usr/bin/python

# coding=

2. 最常见的,带冒号的(大多数编辑器都可以正确识别的):

#!/usr/bin/python

# -*- coding: -*-

3. vim的:

#!/usr/bin/python

# vim: set fileencoding= :

设置头部的编码声明有以下几个作用:

如果代码中有中文注释,就需要此声明

比较高级的编辑器(比如我的emacs),会根据头部声明,将此作为代码文件的格式。

程序会通过头部声明,解码初始化 u”人生苦短”,这样的unicode对象,(所以头部声明和代码的存储格式要一致)

设置默认解码格式

import sys #引用sys模块进来,并不是进行sys的第一次加载

reload(sys) #重新加载sys

sys.setdefaultencoding('utf8') ##调用setdefaultencoding函数

这里特别注意的是第二行的reload(sys),这个一定不能少,少了的话就不能正确运行。那么为什么要重新加载,而直接引用过来则不能调用该函数呢?因为setdefaultencoding函数在被系统调用后被删除了,所以通过import引用进来时其实已经没有了,所以必须reload一次sys模块,这样setdefaultencoding才会为可用,才能在代码里修改解释器当前的字符编码。

在python安装目录的Lib文件夹下,有一个叫site.py的文件,在里面可以找到main() –> setencoding()–>sys.setdefaultencoding(encoding),因为这个site.py每次启动python解释器时会自动加载,所以main函数每次都会被执行,setdefaultencoding函数一出来就已经被删除了。

关于 sys.defaultencoding,这个在解码没有明确指明解码方式的时候使用。比如我有如下代码:

#! /usr/bin/env python

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

s = '中文' # 注意这里的 str 是 str 类型的,而不是 unicode

s.encode('gb18030')

这句代码将 s 重新编码为 gb18030 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此

Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb18030。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是

ANSCII,如果 s 不是这个类型就会出错。拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式和文件的编码方式一致,是 utf8 的,所以出错了:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position

0: ordinal not in range(128)

对于这种情况,我们有两种方法来改正错误:

一是明确的指示出 s 的编码方式

#! /usr/bin/env python

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

s = '中文'

s.decode('utf-8').encode('gb18030')

二是更改 sys.defaultencoding 为文件的编码方式

#! /usr/bin/env python

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

import sys

reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入

sys.setdefaultencoding('utf-8')

str = '中文'

str.encode('gb18030')

以上这篇python 设置文件编码格式的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持聚米学院。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Entity Framework context per request

原文发布时间为:2011-09-24 —— 来源于本人的百度文章 [由搬家工具导入]http://www.blog.cyberkinetx.com/2011/05/15/entity-framework-context-per-request/Are you still using the?1234using(DBContext context newDBContext()){ ..}way of accessing the d…

Java commit()_Java XAResource.commit方法代码示例

import javax.transaction.xa.XAResource; //导入方法依赖的package包/类public void testSuspendableTx() throws Exception {if (!versionMeetsMinimum(5, 0)) {return;}Connection conn1 null;MysqlXADataSource suspXaDs new MysqlXADataSource();suspXaDs.setUrl(BaseTe…

python如何优雅判断类型

http://note.youdao.com/noteshare?id6f3a7963efc57b5d0b1c712654d100c6转载于:https://www.cnblogs.com/taiyang-li/p/7190195.html

java网络io_彻底搞懂Java的网络IO

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼java.io包基于流模型实现,提供File抽象、输入输出流等IO的功能。交互方式是同步、阻塞的方式,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞。java.io包的好处是…

1. 在虚拟机中 添加内容

步骤: 1. 找到要添加的内容,按住 ctrl c 复制 ,例如:复制 飞秋 2. 打开 虚拟机,找到 要复制文件的位置。 3. 将 复制的文件添加到 共享文件夹下面。 4. 打开虚拟机,安装飞秋 5, 最后就完成了…

JavaScript设计模式-10.工厂模式实例xhr

1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset"UTF-8">5 <title>Javascript高级语法10-工厂模式实例xhr</title>6 </head>7 <body>8 <script>9 //接口…

java web scala_spring boot+scala编写web接口

本人是Java开发者&#xff0c;有面向对象的基础&#xff0c;而Scala也是面向对象的语言&#xff0c;学习后可快速入门。通过学习Scala的面向对象(和java面向对象类似)、Scala的高级函数(map,reduce等&#xff0c;和Java8中的stream编程类似)、Scala的隐式转换(在Java中可通过sp…

java对象引用出错_上传图片错误:尝试在空对象引用上调用虚拟方法’java.lang.String android.net.Uri.getLastPathSegment()’...

我有“用相机捕获图像”的问题,并将其存储到Firebase中.我认为该代码是正确的,因为它可以与“从图库中选择图像”一起使用.捕获完图像后,该应用程序停止了,并且没有存储在数据库中.我认为这对于android M和N是个问题.我只是看到其他类似的问题,但它们对我不起作用.我为此寻求帮…

数组的运用

一、数组的概念以及定义&#xff1a; 1、 数组是存储同一种数据类型多个元素的集合&#xff0c;也可以看作是一个容器。 2、数组既可以存储基本数据类型&#xff0c;也可以存储引用数据类型。 二、一维数组&#xff1a; 1、一维数组的定义&#xff1a; 数据类型 [ ] 数组名 ne…

java小应用_java小应用

第一次使用简书记笔记&#xff0c;主要目的是为了加深印象&#xff0c;方便忘记时及时翻看。hello.java代码如下&#xff1a;import java.applet.Applet;import java.awt.*;public class hello extends Applet{private Font f1;public void init(){f1 new Font("宋体&quo…

POJ 2288 Islands and Bridges(状压dp)

http://poj.org/problem?id2288 题意&#xff1a; 有n个岛屿&#xff0c;每个岛屿有一个权值V&#xff0c;一条哈密顿路径C1&#xff0c;C2&#xff0c;...Cn的值为3部分之和&#xff1a; 第1部分&#xff0c;将路径中每个岛屿的权值累加起来&#xff1b;第2部分&#xff0c;对…

java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果

这是一款HTML5 canvas橡皮擦擦拭效果。该效果通过canvas来制作遮罩层和擦拭用的橡皮擦&#xff0c;用户可以通过移动鼠标来移除遮罩层&#xff0c;效果非常炫酷。因为发代码有时会排版混乱&#xff0c;所以先发图演示了。源码已经打包好了&#xff0c;想学习的朋友可以下载练习…

web前端开发面试题(答案)

1.xhtml和html有什么区别&#xff1f; HTML是一种基本的WEB网页设计语言&#xff0c;XHTML是一个基于XML的置标语言最主要的不同&#xff1a;XHTML 元素必须被正确地嵌套。XHTML 元素必须被关闭。标签名必须用小写字母。XHTML 文档必须拥有根元素。 2.行内元素有哪些?块级元素…

mysql to mssql_MysqlToMsSql

MysqlToMsSql是一款简单易用的数据库迁移工具&#xff0c;这款软件功能强大&#xff0c;可以帮助用户将MySQL数据库内容转移到msSQL数据库中&#xff0c;采用可视化操作&#xff0c;支持预览&#xff0c;方便用户查看数据库&#xff0c;实用性强&#xff0c;有需要的用户快来下…

java延迟覆盖_高效Java第九条覆盖equals时总要覆盖hashCode

原标题&#xff1a;高效Java第九条覆盖equals时总要覆盖hashCode高效Java第九条覆盖equals时总要覆盖hashCode在每个覆盖了equals方法的类中&#xff0c;也必须覆盖hashCode方法。否则会导致该类无法与基于散列的集合一起正常运作。 hashCode约定在应用程序的执行期间&#xff…

原生js简单实现双向数据绑定原理

根据对象的访问器属性去监听对象属性的变化&#xff0c;访问器属性不能直接在对象中设置&#xff0c;而必须通过 defineProperty() 方法单独定义。 访问器属性的"值"比较特殊&#xff0c;读取或设置访问器属性的值&#xff0c;实际上是调用其内部特性&#xff1a;get…

Flyweight Design Pattern 共享元设计模式

就是利用一个类来完毕多种任务&#xff0c;不用每次都创建一个新类。 个人认为这个设计模式在C里面。好像能够就使用一个函数取代&#xff0c;利用重复调用这个函数完毕任务和重复利用这个类&#xff0c;好像差点儿相同。 只是既然是一个设计模式&#xff0c;那么就使用类来完毕…

java中write方法报错_Java中管道报错:Write end dead

今天看了下关于管道的通信&#xff0c;Java中的管道只能在同一进程的不同线程间通信。今天测试两个线程进行通信发现报错。下面是我测试的代码。package com.wpl.testIO;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;public …

Linux课堂笔记-第二天

Shell简介 在Linux系统中&#xff0c;shell是最常用程序&#xff0c;作用侦听用户命令&#xff0c;启动命令所指定的进程并将结果返回给用户。他还是一种程序设计语言&#xff0c;是系统维护时的重要工具。 两部分组成&#xff0c;#为命令行提示符&#xff1b;#为超级用户&…

java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出

目前&#xff0c;MapStruct不支持具有多个源属性的映射方法。但是&#xff0c;在您的情况下&#xff0c;您可以使用1.2.0中的Context 。 根据我的理解&#xff0c; projId和code就像映射的帮助器一样&#xff0c;它们不用于映射目标属性。所以你可以做一些事情(它应该在理论上起…