java源代码的编码 java源代码在哪个文件

如何获取java源文件编码格式java中主要使用charset这个类来判断文件的编码格式 , 代码如下:
package com.ghj.packageoftool;
import info.monitorenter.cpdetector.io.ASCIIDetector;
import info.monitorenter.cpdetector.io.ByteOrderMarkDetector;
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.JChardetFacade;
import info.monitorenter.cpdetector.io.ParsingDetector;
import info.monitorenter.cpdetector.io.UnicodeDetector;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.Charset;
/**
* 文件工具类
*
* @author 高焕杰
*/
public class FileTool {
/**
* 获取本地文件的编码格式
*
* @param file 要判断的文件编码格式
*
* @author 高焕杰
*/
public static String getLocalFileEncode(File localFile) {
/*
* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成 。
* cpDetector内置了一些常用的探测实现类 , 这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector 。
* cpDetector按照“谁最先返回非空的探测结果 , 就以该结果为准”的原则返回探测到的字符集编码 。cpDetector是基于统计学原理的 , 不保证完全正确 。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示 。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定 。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等 。
codepageDetector.add(new ByteOrderMarkDetector());
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
Charset charset = null;
try {
charset = codepageDetector.detectCodepage(localFile.toURI().toURL());
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获得远程URL文件的编码格式
*
* @param url 远程文件的URL路径
*
* @author 高焕杰
*/
public static String getURLFileEncode(URL url) {
/*
* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成 。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector 。
* cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码 。cpDetector是基于统计学原理的 , 不保证完全正确 。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示 。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet , 它可以完成大多数文件的编码 测定 。所以,一般有了这个探测器就可满足大多数项目的要求 , 如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等 。
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
Charset charset = null;
try {
charset = codepageDetector.detectCodepage(url);
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获得文件流的编码格式
*
* @param inputStream 文件流
*
* @author 高焕杰
*/
public static String getInputStreamEncode(InputStream inputStream) {
/*
* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成 。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来 , 如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector 。
* cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码 。cpDetector是基于统计学原理的 , 不保证完全正确 。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示 。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet , 它可以完成大多数文件的编码 测定 。所以 , 一般有了这个探测器就可满足大多数项目的要求,如果你还不放心 , 可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等 。
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
Charset charset = null;
try {
charset = codepageDetector.detectCodepage(inputStream, 0);
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获得字符串的编码格式
*
* @param stringValue 要判断的文件编码格式字符串
*
* @author 高焕杰
*/
public static String getStringEncode(String stringValue) {
/*
* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成 。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector 。
* cpDetector按照“谁最先返回非空的探测结果 , 就以该结果为准”的原则返回探测到的字符集编码 。cpDetector是基于统计学原理的 , 不保证完全正确 。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示 。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定 。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等 。
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
Charset charset = null;
try {
InputStream inputStream = new ByteArrayInputStream(stringValue.getBytes());
charset = codepageDetector.detectCodepage(inputStream, 3);
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Java 源代码的编码问题//我写了一个程序,你把文字复制到文本框中点转码按钮,就可以了
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class Class1 extends JFrame {
private final class AT implements ActionListener {
public void actionPerformed(ActionEvent e) {
jta.setText(fixString(jta.getText()));
}
}
public static void main(String[] args) {
JFrame jf = new Class1();
}
JTextArea jta = new JTextArea();
public Class1() {
setSize(400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton jb = new JButton("转码");
jb.addActionListener(new AT());
add(jta);
add("North", jb);
setVisible(true);
}
String fixString(String s) {
while (true) {
int index = s.indexOf("\\u");
if (index != -1) {
String s1 = s.substring(index, index6);
if (s1.matches("\\\\u[0-9A-F]{4}")) {
char c = (char) Integer.parseInt(s1.replace("\\u", ""), 16);
s = s.substring(0, index)cs.substring(index6);
}
} else {
break;
}
}
return s;
}
}
java源代码与字节码文件类型有哪些java源文件java源代码的编码的格式是text/html类型的java源代码的编码,可以直接用记事本打开 。编码可以是utf-8java源代码的编码,也可以是其它类型的 。后缀为.java
源文件编译后的字节码是以CAFE BABY开头的二进制文件 。需要JVM才能读懂 。后缀为.class
一般来说java源代码的编码,一个类对应一个字节码文件,内部类编译后也会生成一个单独的字节码文件 。字节码文件是以类名来命名(标识)的 。
一些相关的字节码文件可以按照包结构打包成jar文件 。jar文件和zip文件差不多 。
java程序一般都会依赖很多的jar文件,比如最基本的rt.jar 。
java中编码与解码分别指什么?java中编码java源代码的编码:URLEncoder.encode(strUri,"utf-8");
java中解码码java源代码的编码:URLDecoder.decode(strUri,"utf-8");
java编码和解码
流读取文件,具有转换编码功能java源代码的编码的有:OutputStreamWriter和InputStreamReader,
构造器有如:
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader 。
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter 。
处理字符串编码问题:
重新对获取的字符串进行编码:Byte[] bytes = str.getBytes(String encodeCharsetNam);
重新对bytes进行解码,创建新的字符串对象:str = new String(Byte[] bytes,String decodeCharsetName);
一般结合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);
例如:resultName=new String(username.getBytes("ISO-8859-1"),"UTF-8");
还可以加入判断:
if(!Charset.forName("gbk").newEncoder().canEncode(str)){str = new Strin(str.getBytes("ISO-8859-1"),"UTF-8");}else{str = new String(str.getBytes("ISO-8859-1"),"gbk");}
处理请求参数传递编码问题:
java中编码:URLEncoder.encode(strUri,"utf-8");
java中解码码:URLDecoder.decode(strUri,"utf-8");
js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);
js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);
补充概念:
URI组件:主机、端口、路径、查询参数、片段等 。
URI组件分隔符::/?#[]@,冒号用于分隔协议和主机,/用于分隔主机和 路径,?用于分隔路径和查询参数 , 用于分隔多个查询参数等 。
URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @=$ , / ? # [ ] java源代码的编码他们具有特殊作用,例如上面的分隔作用 。
URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用 。
js向java/jsp的编码与解码:
js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));
java/jsp中解码: java.net.URLDecoder.decode(strUri,"UTF-8");
js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码 。
然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码 。
java怎么都是*InputStreamReader in = new InputStreamReader(new FileInputStream(“demo.txt”),”UTF-8”);
给InputStreamReader指定解码编码,这样二者统一就不会出现乱码了 。
下面说说字符输出流 。
字符输出流的原理和字符输入流的原理一样,也可以看做是包装流,其底层还是采用字节输出流来写文件 。只是字符输出流根据指定的编码将字符转换为字节的 。字符输出流的主要类是java源代码的编码:OutputStreamWriter 。Java api解释如下:OutputStreamWriter 是字符流通向字节流的桥梁:使用指定的 charset 将要向其写入的字符编码为字节 。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集 。说的很明白了,它需要一个编码将写入的字符转换为字节,如果没有指定则采用GBK编码,那么输出的字节都将是GBK编码,生成的文件也是GBK编码的 。如果采用以下方式构造OutputStreamWriter:
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(“dd.txt”),”UTF-8”);
那么写入的字符将被编码为UTF-8的字节,生成的文件也将是UTF-8格式的 。
问题二: 既然读文件要使用和文件编码一致的编码,那么javac编译文件也需要读取文件,它使用什么编码呢?
这个问题从来就没想过,也从没当做是什么问题 。正是因为问题一而引发的思考 , 其实这里还是有东西可以挖掘的 。下面分三种情况来探讨,这三种情况也是java源代码的编码我们常用的编译java源文件的方法 。
1.javac在控制台编译java类文件 。
通常java源代码的编码我们手动建立一个java文件Demo.java,并保存 。此时Demo.java文件的编码为ANSI,中文操作系统下就是GBK.然后使用javac命令来编译该源文件 。”javac Demo.java” 。Javac也需要读取java文件,那么javac是使用什么编码来解码我们读取的字节呢?其实javac采用了操作系统默认的GBK编码解码我们读取的字节,这个编码正好也是Demo.java文件的编码,二者一致,所以不会出现乱码情况 。让我们来做点手脚,在保存Demo.java文件时,我们选择UTF-8保存 。此时Demo.java文件编码就是UTF-8了 。我们再使用”javac Demo.java”来编译,如果Demo.java里含有中文字符,此时控制台会出现警告信息,也出现了乱码 。究其原因,就是因为javac采用了GBK编码解码我们读取的字节 。因为我们的字节是UTF-8编码的,所以会出现乱码 。如果不信的话java源代码的编码你可以自己试试 。那么解决办法呢?解决办法就是使用javac的encoding参数来制定我们的解码编码 。如下:javac -encoding UTF-8 Demo.java 。这里我们指定了使用UTF-8来解码读取的字节 , 由于这个编码和Demo.java文件编码一致,所以不会出现乱码情况了 。
2.Eclipse中编译java文件 。
我习惯把Eclipse的编码设置成UTF-8 。那么每个项目中的java源文件的编码就是UTF-8 。这样编译也从没有问题 , 也没有出现过乱码 。正是因为这样才掩盖了使用javac可能出现的乱码 。那么Eclipse是如何正确编译文件编码为UTF-8的java源文件的呢?唯一的解释就是Eclipse自动识别了我们java源文件的文件编码,然后采取了正确的encoding参数来编译我们的java源文件 。功劳都归功于IDE的强大了 。
3.使用Ant来编译java文件 。
Ant也是我常用的编译java文件的工具 。首先,必须知道Ant在后台其实也是采用javac来编译java源文件的 , 那么可想而知 , 1会出现的问题在Ant中也会存在 。如果我们使用Ant来编译UTF-8编码的java源文件,并且不指定如何编码,那么也会出现乱码的情况 。所以Ant的编译命令有一个属性” encoding”允许我们指定编码,如果我们要编译源文件编码为UTF-8的java文件,那么我们的命令应该如下:
指定了编码也就相当于”javac –encoding”了,所以不会出现乱码了 。
【java源代码的编码 java源代码在哪个文件】java源代码的编码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java源代码在哪个文件、java源代码的编码的信息别忘了在本站进行查找喔 。

    推荐阅读