在windows server 2008上运行一个java程序,发现其系统字符集为“Cp1252”:
/* java.net. */ Socket Sock = ...;
InputStreamReader is = new InputStreamReader(Sock.getInputStream());
System.out.println("Character encoding = " + is.getEncoding());
// Prints "Character encoding = Cp1252"
通过chcp命令查看系统字符集是936:
C:\>chcp 活动代码页: 936
应用程序接收到字节 0x81, 在936字符集中是 ü
. 但java程序中的系统字符集是1252,而在这个字符集中不含这个字符。
可以在java启动参数中增加字符集设置,来临时解决这个问题:
java.exe -Dfile.encoding=Cp850 ...
但为什么java中的系统字符集和windows中的活动代码页不一样呢?查看windows中的codepage定义如下:
Based on the usage, the codepage supported in Windows can be categorized in the following: ANSI codepage ANSI codepages are codepages for which non-ASCII values (values greater than 127) represent international characters.<1> Windows codepages are also sometimes referred to as active codepages or system active codepages. Windows always has one currently active Windows codepage. All ANSI Windows functions use the currently active codepage. The usual ANSI codepage ID for US English is codepage 1252. Windows codepage 1252, the codepage commonly used for English and other Western European languages, was based on an American National Standards Institute (ANSI) draft. That draft eventually became ISO 8859-1, but Windows codepage 1252 was implemented before the standard became final, and is not exactly the same as ISO 8859-1. OEM codepage Original equipment manufacturer (OEM) codepages are codepages for which non-ASCII values represent line drawing and punctuation characters. These codepages are still used for console applications. They are also used for the non-extended file names in the FAT12, FAT16, and FAT32 file systems. The usual OEM codepage ID for US English is codepage 437. Extended codepage These codepages cannot be used as ANSI codepages, or OEM codepages. Windows can support conversions between Unicode and these codepages. These codepages are generally used for information exchange purpose with international/national standard or legacy systems. Examples are UTF-8, UTF-7, EBCDIC, and Macintosh codepages.
难道java读取的是ANSI codepage?儿不是OEM codepage ?
通一个java程序通过cmd启动时,编码是cp936。通过windows服务启动时,编码是Cp1252。由此可见,console application使用OEM codepage。windows服务使用ANSI codepage。
在那里设置ANSI codepage呢?
控制面板--区域和语言--管理--非Unicode程序的语言
注册表:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage\ACP
相关推荐
在Java编程语言中,`file.encoding`是一个非常重要的系统属性,它定义了默认的字符编码。这个属性在处理文件输入输出、字符串与字节数组转换时起到关键作用。本文将深入探讨`file.encoding`的设置及其在Java中的工作...
接下来,我们需要创建一个清单文件(manifest file),它用于指定.jar 文件的 metadata。manifest 文件的内容如下: ``` Manifest-Version: 1.0 Created-By: xyz Main-Class: T.InputDialogDemo ``` 其中,Main-...
Java编译器(javac)在编译源文件时,如果没有明确指定编码,会默认使用`file.encoding`系统属性所指定的编码,这通常是与操作系统一致的编码。当这个编码与源文件的实际编码不匹配时,编译后的class文件中的中文...
在Java编程语言中,对文件进行压缩和解压缩是一项常见的任务。`java.util.zip`包提供了基础的压缩功能,但默认情况下,它可能无法正确处理包含中文文件名的情况。为了解决这个问题,开发者有时需要对原始源码进行...
在资源文件中添加 encoding.properties 文件可以指定资源文件的编码方式: `encoding=UTF-8` 四、结论 Maven 发布 Jar 包中文乱码问题是由于字符集不兼容所致。通过在 pom.xml 文件中添加配置、在 Maven 命令中...
1. **从`file.encoding`编码到Unicode编码**:当使用JDK中的`javac.exe`编译Java源代码时,如果不显式指定编码方式,编译器会自动检测操作系统默认的`file.encoding`属性,并将其作为源文件的编码格式。例如,在中文...
import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.Reader; /** * @author 码农小江 * H20121012.java * 2012-10-12下午11:40:21 */ public ...
在终端中,通过`java -version`命令检查Java版本。示例中显示的是1.8.0_202,这表明Java已经正确安装并可用于Jenkins。 2. **下载Jenkins**: 获取Jenkins的WAR文件,例如`jenkins-2.319.3-lts.war`,将其放在您...
在英文操作系统上,可以通过命令行参数如`-Dclient.encoding.override=GBK`、`-Dfile.encoding=GBK`和`-Duser.language=zh`来指定JVM使用中文环境。 Java源代码的编译过程是由`javac`命令完成的。默认情况下,`...
java.io.File zipfile =new java.io.File(zipf); java.io.File[] srcfile=new java.io.File[20]; //自己把要压缩的文件加进去 int m=0; //---------压缩包中文件的个数-------------- byte[] buf=new byte[1024];...
3. **运行时配置**:设置`file.encoding`环境变量为正确的编码,或者在代码中使用`System.setProperty("file.encoding", "UTF-8")`来覆盖默认值。 4. **I/O流处理**:在读写文件或网络数据时,明确指定输入输出流的...
在Java代码中,可以通过System.getProperty("file.encoding")方法获取当前JVM使用的默认字符编码。这种编码方式对文件I/O操作有着直接影响。如果需要对特定的文件进行特定编码格式的读写,Java提供了字符流(如...
System.setProperty("file.encoding", "UTF-8"); 或者,在 Java 应用程序的启动命令中添加以下参数: -Dfile.encoding=UTF-8 解决 Java log 输出中文乱码问题需要ombine locale 设置和 Java 应用程序的编码方式...
Java编程语言中,异常处理是程序健壮性的重要组成部分。当程序执行过程中遇到错误或特殊情况时,Java会抛出异常,这些异常分为两种主要类型:检查型异常(Checked Exceptions)和运行时异常(Runtime Exceptions)。...
其他的 Java 平台规范 .......................................................................................................................................3 其他重要参考资料 ............................
在IT行业中,文件压缩是一种常见的数据存储和传输方式,ZipOutputStream是Java标准库中的一个类,用于将数据流写入ZIP格式的压缩文件。本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码...
在Servlet中,可以使用`request.setCharacterEncoding("UTF-8")`来设置请求的编码。 3. 字符串转换为字节流和字节流转换为字符串的乱码: 在进行字节流操作时,如`getBytes()`和`new String(byte[])`,需要明确...
1. 打开Eclipse,选择【File】→【New】→【Java Project】。 2. 在弹出的对话框中,填写项目的名称和其他相关信息。 3. 单击【Finish】完成项目创建。 完成这些步骤后,你可以在Eclipse或MyEclipse中编写、编译和...
1. **确认JVM编码**:确保启动Java应用时指定了正确的`file.encoding`,例如`java -Dfile.encoding=UTF-8 YourProgram`。 2. **源码编码检查**:确保所有Java源代码文件使用统一的编码,通常是UTF-8,避免混合使用...