python默认的字符编码是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python默认的字符编码是啥相关的知识,希望对你有一定的参考价值。

Python的默认编码是ASCII格式:

    ASCII(American Standard Code for Information Interchange),是一种单字节的编码。计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号;

    源代码文件中,如果有用到非ASCII字符,则需要在文件头部进行字符编码的声明,如下:#-*- coding: UTF-8 -*-

    实际上Python只检查#、coding和编码字符串,其他的字符都是为了美观加上的。另外,Python中可用的字符编码有很多,并且还有许多别名,还不区分大小写,比如UTF-8可以写成u8。

参考技术A 普通string是ascii,
u"abc"是unicode本回答被提问者采纳
参考技术B 系统默认的字符编码 参考技术C 看你的程序文件以什么编码保存.

JVM 的默认编码是啥?

【中文标题】JVM 的默认编码是啥?【英文标题】:What is the default encoding of the JVM?JVM 的默认编码是什么? 【发布时间】:2010-11-03 15:00:15 【问题描述】:

UTF-8 是 Java 中的默认编码吗? 如果不是,我怎么知道默认使用哪种编码?

【问题讨论】:

【参考方案1】:

JVM 的默认字符集是运行它的系统的字符集。这没有特定的值,您通常不应依赖默认编码是任何特定值。

可以在运行时通过Charset.defaultCharset() 访问它,如果这对您有任何用处,但实际上您应该指出始终明确指定编码

【讨论】:

如果你是对的,我觉得有点奇怪java.sun.com/javase/technologies/core/basic/intl/… 说它总是 UTF-16。 UTF-16 是 JVM 内部表示文本的方式。默认编码决定了 JVM 如何解释从文件中读取的字节(例如使用FileReader)。 这个答案是正确的,但是作为参考,在Linux上它通常是“UTF-8”,而在Windows上它通常是“cp1252”。 我刚刚经历了一个 linux 安装,它从语言环境报告 UTF-8,但 java 说的是 US-ASCII。 错了。检查Charset.defaultCharset() 源代码。它读取 file.encoding 属性,否则使用 UTF-8。【参考方案2】:

请注意,您可以使用名称容易混淆的属性file.encoding 更改 JVM 的默认编码。

如果您的应用程序对编码特别敏感(可能通过使用暗示默认编码的 API),那么您应该在 JVM 启动时将其显式设置为一致(已知)值。

【讨论】:

请注意,file.encoding 必须在 JVM 启动时指定(即作为命令行参数 -Dfile.encoding 或通过 JAVA_TOOLS_OPTIONS);您可以在运行时设置它,但这并不重要。见***.com/questions/361975/…【参考方案3】:

共有三种“默认”编码:

file.encoding:System.getProperty("file.encoding")

java.nio.Charset:Charset.defaultCharset()

以及InputStreamReader的编码:InputStreamReader.getEncoding()

您可以在this page 上阅读更多相关信息。

【讨论】:

【参考方案4】:

要获取默认的 java 设置,只需使用:

java -XshowSettings 

【讨论】:

【参考方案5】:

我确信这是特定于 JVM 实现的,但我能够通过执行“影响”我的 JVM 的默认 file.encoding:

export LC_ALL=en_US.UTF-8

(在 Ubuntu 12.04 上运行 java 版本 1.7.0_80)

此外,如果您从 unix 控制台输入“locale”,您应该会在此处看到更多信息。

所有功劳归http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/

【讨论】:

你是怎么检查的?我找不到证明 Java 对语言环境字符串中的编码给予任何关注的证据。仅来自file.encoding 属性。 @ArtemNovikov - 是的,但是file.encoding 的默认值是多少?根据sprops.encoding的值在java.lang.System.initProperties中初始化,其中sprops是本机函数GetJavaProperties()返回的结构体,其实现因平台而异。例如,在 Windows 版本中,它调用 GetUserDefaultLCID(),然后调用 GetLocaleInfo (lcid, LOCALE_IDEFAULTANSICODEPAGE, ...) 来查找用户的默认 ANSI 代码页并使用它。在 Unix 平台上,它解析 setlocale(LC_CTYPE, NULL) 的返回值。 ... 有关详细信息,请参阅 hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/… 和 hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/solaris/…。【参考方案6】:

您可以使用它来打印出 JVM 默认值

import java.nio.charset.Charset;
import java.io.InputStreamReader;
import java.io.FileInputStream;

public class PrintCharSets 
        public static void main(String[] args) throws Exception 
                System.out.println("file.encoding=" + System.getProperty("file.encoding"));
                System.out.println("Charset.defaultCharset=" + Charset.defaultCharset());
                System.out.println("InputStreamReader.getEncoding=" + new InputStreamReader(new FileInputStream("./PrintCharSets.java")).getEncoding());
        

编译并运行

javac PrintCharSets.java && java PrintCharSets

【讨论】:

【参考方案7】:

它将取决于语言环境。不同的语言环境,不同的默认编码。

【讨论】:

所以这取决于主机操作系统的编码?

以上是关于python默认的字符编码是啥的主要内容,如果未能解决你的问题,请参考以下文章

python字符串编码

python---字符编码

Python文件处理里encoding和encode有事区别,bytes类型是啥意思?

java中Char到底是啥格式的编码

python入门:字符编码

python字符编码