`
yfkscu
  • 浏览: 2987 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

java编码杂记

阅读更多
编译阶段:首先编写java源文件,并以一定编码保存,调用java编译器编译源文件,Javac命令行参数-encoding告诉java编译器java源文件使用的编码(如果没有指定则java编译器认为java文件使用操作系统中file.encoding指定的编码),java编译器会首先把源文件从-encoding编码转换到unicode编码(初步认为是utf8编码)存储到内存中,最后写入class文件(class文件是utf8编码)。

执行阶段:
jvm首先把class文件读入内存(把utf8编码的class文件直接读入内存,不进行转码),然后把输出字符串转换成-Dfile.encoding指定的编码或者指定输入字符串的编码格式。

java的class文件是以utf8存储的,这点可以使用UE软件查看16进制编码和utf8编码得知。

总之,java中以unicode字符编号为桥梁,进行各种编码转换,转换都是针对unicode字符编号(每一个字符都有唯一的unicode编号,范围U+0000 ~ U+10FFFF为有效字符编号)

int codePoint = Character.toCodePoint(char high, char low)//转换一个utf-16编码的字符到unicode编码
char[] chars = Character.toChars(int codePoint)//转换一个unicode编码到一个或者两个utf-16编码字符


#### jsp编码总结
jsp会在第一次被访问的时候由jsp容器对jsp进行一次转码存储到内存中(pageEncoding指定的编码-->contentType中的charset指定编码-->默认ISO-8859-1编码依次尝试转成unicode编码存储到内存中)--------> 接着把内存中的数据保存到.java文件中(.java文件的编码由web.xml中的javaEncoding参数控制,tomcat默认是utf8无bom编码)---->  tomcat容器会调用java编译器会按照javaEncoding编码把.java文件读取到内存中转换为unicode编码然后编译保存成utf-8编码的.class文件,最后jvm加载.class文件,运行字节码,输出结果编码格式由(contentType中charset ---> pageEncoding ---> ISO-8859-1 依次尝试确定)

### servlet编码总结
servlet输入编码由request.setCharacterEncoding()确定(默认为iso-8859-1),输出编码由response.setCharacterEncoding()确定(默认为ISO-8859-1)

#### gcc(gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)) 编码 ##############
在ubuntu 2.6.38-8-generic下测试有如下结果:
1:支持gbk,ascii,utf8的源文件编译,不支持utf16和utf32编码
2:gcc会保证.o和.out文件的编码与源文件一致,在没有指定finput-charset参数的时候,会猜测源文件编码进行编译。

############ shell 编码问题
shell脚本不能以utf8-bom格式(要以utf8无bom格式保存),否则执行时候会报错(行 1: $'\357\273\277#!': 未找到命令)
shell脚本使用gbk编码后(ex: run.sh)
#! /bin/bash
cat Test.java | grep '中国'
只有run.sh和Test.java都使用utf8无bom格式编码了才能正常的匹配出来

cat run.sh > txt (txt文件的格式和run.sh的格式保持一致)
分享到:
评论

相关推荐

    java杂记.txt

    除了Java基础之外,还有一小部分web方面的知识,如:JSP、EL表达式、JSTL、过滤器与监听器之类的知识,但是只有一小部分

    java加密算法及常用知识学习杂记

    5. **学习杂记**:学习加密算法不仅需要理解算法原理,还要熟悉Java提供的加密API。实践是提升技能的关键,通过编写示例代码,理解如何创建密钥、初始化Cipher对象、处理加密和解密过程。同时,了解加密过程中的常见...

    oracle杂记.doc

    oracle杂记.doc 这是我个人的总结。 主要是oracle的编程以及体系结构的理解。

    计算机杂记

    - **jre**:Java 运行时环境,包含了运行 Java 程序所需的库和虚拟机。 - **src.zip**:源代码归档文件,通常包含了一个项目的全部源代码。 以上是对给定文件中提到的基础知识点的详细解释,涵盖了计算机编程领域的...

    第14章 Pythonic与Python杂记.mp4

    第14章 Pythonic与Python杂记.mp4

    java多线程相关

    本篇将深入探讨Java多线程的相关知识,结合《java随笔杂记.doc》文档中的内容,我们将覆盖以下几个方面: 1. **线程的创建方式** - 实现`Runnable`接口:创建一个实现了`Runnable`接口的类,然后将其实例传递给`...

    oracle 9i杂记

    《Oracle 9i杂记——探索PLSQL的世界》 Oracle 9i,作为Oracle数据库的一个重要版本,引入了许多新特性和改进,其中PL/SQL(Procedural Language/Structured Query Language)是其核心组成部分,是一种结合了SQL和...

    李特伍德 一个数学家的杂记.pdf

    李特伍德的《一个数学家的杂记》是一本收录了作者关于数学、教育以及个人观点文章的集合。这本杂记以数学为主题,涉及的内容包括几何、概率论、数论以及历史上的数学发现等。李特伍德在书中讨论了数学知识与日常生活...

    Android平台搭建杂记

    然而,Eclipse需要Java运行环境支持,因此你需要先安装JRE(Java Runtime Environment)和JDK(Java Development Kit)。JRE提供运行Java程序所需的环境,JDK则包含开发工具。下载并安装jre-6u23-windows-i586.exe和...

    installshield安装制作杂记

    installshield安装制作杂记 installshield x

    PD杂记体育ii已同居ikyht

    【数据库设计基础与PowerDesigner应用】 数据库设计是IT领域中至关重要的部分,它涉及概念设计、逻辑设计和物理设计等多个阶段。在概念设计阶段,我们主要关注实体、属性和联系集,这些都是构建数据库模型的基础...

    杂记:一家大鱼及其他

    杂记中所讲述的内容和描绘的场景,实际上蕴含了丰富的中国农村生活细节和风土人情,以及人性的细腻观察。以下是对这些内容的知识点解读: 首先,杂记中提到了家庭中烹饪的场景,特别强调了“蒸菜疙瘩”的制作过程。...

    14.6 None|Pythonic与Python杂记|Python3.8入门 & 进阶 & 原生爬虫实战完全解读

    14.6_None|Pythonic与Python杂记|Python3.8入门_&_进阶_&_原生爬虫实战完全解读

    反爬杂记日常记录十一字

    反爬杂记日常记录十一字

    爬虫杂记日常记录十一字

    爬虫杂记日常记录十一字

    个人笔记美食杂记生活等

    个人笔记美食杂记生活等

    狱中杂记教学设计.pdf

    狱中杂记教学设计.pdf

    互联网杂记(六).docx

    互联网杂记(六).docx

Global site tag (gtag.js) - Google Analytics