精华内容
下载资源
问答
  • JAVA中检测字符编码
    千次阅读
    2021-02-12 17:54:15

    一、按不同编码方式进行试转换,比较转换后与转换前是否相同:

    // 识别字符串编码

    public static String getEncoding(String str) {

    if (str == null || str.trim().length() < 1)

    return "";

    // 常用字符编码数组

    String[] encodes = new String[] { "GBK", "ISO-8859-1", "GB2312",

    "GB18030", "UTF-8" };

    for (String encode : encodes) {

    try {

    // 匹配字符编码

    if (str.equals(new String(str.getBytes(), encode))) {

    // 返回编码名称

    return encode;

    } else {

    continue;

    }

    } catch (Exception er) {

    }

    }

    return "";

    }

    二、分析byte[]来判断规律。

    缺点:有时,个别本地编码字节在utf8中也会出现,导致出错,需要分析。

    public static boolean isValidUtf8(byte[] b,int aMaxCount){

    int lLen=b.length,lCharCount=0;

    for(int i=0;i < lLen; i++){

    byte lByte=b[i++];//to fast operation, ++ now, ready for the following for(;;)

    if(lByte>=0) continue;//>=0 is normal ascii

    if(lByte(byte)0xfd) return false;

    int lCount=lByte>(byte)0xfc?5:lByte>(byte)0xf8? 4 :lByte>(byte)0xf0?3:lByte>(byte)0xe0?2:1;

    if(i+lCount>lLen) return false;

    for(int j=0;j=(byte)0xc0) return false;

    }

    return true;

    }

    相应地,一个使用上述方法的例子如下:

    public static String getUrlParam(String aStr,String aDefaultCharset) throws UnsupportedEncodingException{

    if(aStr==null) return null;

    byte[] lBytes=aStr.getBytes("ISO-8859-1");

    return new String(lBytes,StringUtil.isValidUtf8(lBytes)?"utf8":aDefaultCharset);

    }

    三:使用jchardet组件:

    jchardet是mozilla自动字符集探测算法代码的java移植,其源代码可以从sourceforge下载。这个算法的最初作者是frank Tang,C++源代码在

    http://www.infomall.cn/cgi-bin/mallgate/20040514/

    http://lxr.mozilla.org/mozilla/source/intl/chardet/,可以从

    http://www.infomall.cn/cgi-bin/mallgate/20040514/

    http://www.mozilla.org/projects/intl/chardet.html

    得到更多关于这个算法的信息。

    分享到:

    18e900b8666ce6f233d25ec02f95ee59.png

    72dd548719f0ace4d5f9bca64e1d7715.png

    2012-05-14 09:52

    浏览 4464

    评论

    更多相关内容
  • 由《编译.java文件时的编码问题》可知,在编译.java文件的时候,需要正确指定一个编码方案,该编码方案用于解码.java文件的字节流。那么在使用Intellij Idea编译(假定使用javac编译工具)项目下所有的.java文件时,该...

    由《编译.java文件时的编码问题》可知,在编译.java文件的时候,需要正确指定一个编码方案,该编码方案用于解码.java文件的字节流。

    那么在使用Intellij Idea编译(假定使用javac编译工具)项目下所有的.java文件时,该如何指定正确的编码方案呢?

    1)首先,我们需要知道当执行"Build"菜单下的"Make Project"命令,编译整个项目下的.java文件的时候,Intellij Idea执行的具体命令。我们可以通过以下方式获得,执行"Build"菜单下的"Generate Ant Build"命令,生成一个Ant Build File,然后通过这个Ant Build File,我们就可以得到Intellij Idea在编译整个项目的时候执行的具体命令。[1]

    2)借助于1)中的Ant Build File,可以发现Intellij Idea在编译项目下的.java文件时,执行的具体命令是“带有各种参数的javac命令”。其中有一个"-encoding"参数,该参数就是用来指定编译.java文件时应该使用的编码方案的,如图1所示。Intellij Idea自身有一套机制,用来确定该参数的值,经过测试,该值有可能来自"Project Encoding"的配置,见图2;有可能来自某个.java文件被Intellij Idea检测到的使用的编码方案,见链接;也有可能来自图3中所示的编译器参数配置等等。具体的机制需要查阅相关文档。

    图1

    9357226e68e5082eefdd5b238ad65cc3.png

    图2

    da442369885294d00b5b205f537f9696.png

    图3

    f3f34f938e6a3133d92aea50bf93ed21.png

    3)由2)可得,Intellij Idea自身有一套确定"-encoding"参数值的机制,但是往往最后被确定的值不是我们想要的。而且"encoding"参数是非常重要的一个参数,为了更加准确地指定"-encoding"参数,我们可以在图3所示的编译器参数配置中明确配置"-encoding xxx"。

    参考文献:

    [1]http://stackoverflow.com/questions/2966530/can-i-see-the-exact-commands-intellij-uses-to-build-a-java-project

    展开全文
  • Java编码规范

    热门讨论 2014-02-20 17:27:40
    为使开发项目中所有的JAVA程序代码的风格保持一致,增加代码的可读性,便于维护及内部交流,使JAVA程序开发人员养成良好的编码习惯,有必要对JAVA程序的代码编码风格做统一的规范约束。本文档定义了我公司软件开发...
  • java获取字符串编码类型代码(导入直接查看结果)
  • Java字符编码设置总结

    千次阅读 2021-02-13 00:04:59
    1、eclipse workspace中的字符编码:windows->Preferences->general->Workspace以后新建立工程其属性对话框中的Text file encoding即为UTF-8,这个也是安装完Eclipse之后应该立刻做的第一件事,但是这种...

    1、eclipse workspace中的字符编码:

    139100098_1_20180721015331957

    windows->Preferences->general->Workspace

    以后新建立工程其属性对话框中的Text file encoding即为UTF-8,这个也是安装完Eclipse之后应该立刻做的第一件事,但是这种修改只对当前的workspace有效,如果新建或者切换到一个新的workspace下,还是得做同样的步骤。

    139100098_2_20180721015332160

    windows->Preferences->general->Content Types

    点开Text,选择Java Source File,在下面的Default encoding输入框中输入UTF-8,点Update,则设置Java文件编码为UTF-8。其他java应用开发相关的文件如:properties、XML等已经由Eclipse缺省指定,分别为ISO8859-1,UTF-8,如开发中确需改变编码格式则可以在此指定。

    2、Java源文件编码格式指定

    139100098_3_20180721015332285

    先中文件,右键属性打开

    指定文件编码格式为UTF-8,作用:

    (1)、当我们用编辑器编写java源文件,程序文件在保存时会采用操作系统默认的编码格式(一般我们中文的操作系统采用的是GBK编码格式)形成一个.java文件。java源文件是采用操作系统默认支持的file.encoding编码格式保存的。通过System.out.println(System.getProperty('file.encoding')); 可以查看系统的file.encoding参数值。

    (2)、JDK在编译的时候,如果没有用-encoding参数指定java源程序的编码格式,则javac首先获得操作系统默认采用的编码格式(file.encoding),也即在编译java程序时,若不指定源程序文件的编码格式,JDK首先获得操作系统默认的编码格式,xp是GBK,然后jdk就把java源程序从该编码格式转化为java内部的unicode格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是unicode编码的,它暂放在内存中,紧接着,JDK将此以unicode编码的编译后的class文件保存到操作系统中形成.class文件。最终获得的.class文件是内容以unicode编码格式保存的类文件,它内部包含源程序中的中文字符串,只不过此时它己经由安装系统编码格式转化为unicode格式了。

    也就是说,指定源文件编码格式将告诉编译器从何种编码格式转为UNICODE,以生成最终的.class,就是说我们常见的.class文件中的内容无论是中文字符还是英文字符,他们都已经转换为Unicode编码格式了。

    3、javac -encoding

    见上段描述,如果设置了文件编码格式,就不需要指定了,在windows与linux下编译都不会有问题。

    4、JSP编码格式指定

    我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的,在上面代码中有两个地方存在编码:pageEncoding、contentType的charset。其中pageEncoding是jsp文件本身的编码,而contentType的charset是指服务器发送给客户端时的内容编码。

    pageEncoding

    JVM将JSP编译为.java文件,JVM首先会获取pageEncoding的值,如果该值存在则采用它设定的编码来编译,否则则采用file.encoding编码来编译。

    charset

    后台经过处理后将结果输送到客户端,如果设置了charset则浏览器就会使用指定的编码格式进行解码,否则采用默认的ISO-8859-1编码格式进行解码处理。

    5、Tomcat server.xml中URIEncoding

    提交请求到服务器,主要有GET跟POST两种方式,利用request.setCharacterEncoding('UTF-8');来设置Tomcat接收请求的编码格式,只对POST方式提交的数据有效,对GET方式提交的数据无效!

    要设置GET的编码,可以修改server.xml文件中的配置:

    connectionTimeout='20000'

    redirectPort='8443' URIEncoding='UTF-8' />

    如果没有设置则会使用默认的ISO-8859-1来解码,假如我们在页面将编码设置为UTF-8,而URIEncoding设置的不是或者没有设置,那么服务器进行解码时就会产生乱码。这个时候我们一般可以通过new String(request.getParameter('name').getBytes('iso-8859-1'),'utf-8') 的形式来获取正确数据。

    6、spring过滤器中的编码设置encodingFilter

    org.springframework.web.filter.CharacterEncodingFilter

    encoding

    UTF-8

    forceEncoding

    true

    源代码中有以下两行代码:

    request.setCharacterEncoding(this.encoding); //用途:设置客户端post过来的数据的编码格式。

    response.setCharacterEncoding(this.encoding); //用途:设置服务器将数据发送到客户端时的编码格式,这行代码要在设置forceEncoding为true时才起作用。

    7、java -Dfile.encoding

    设置启动JVM进程时系统属性 file.encoding 为 UTF-8,在运行java程序时JVM首先会把保存在操作系统中的class文件读入到内存中,这个时候内存中class文件编码格式为Unicode,然后JVM运行它。如果需要用户输入信息,则会采用file.encoding编码格式对用户输入的信息进行编码同时转换为Unicode编码格式保存到内存中。程序运行后,将产生的结果再转化为file.encoding格式返回给操作系统并输出到界面去,如果是servlet以GET或POST的形式来接收数据,则参见第5段的说明。

    简单的说:源文件编码的格式与java进程的file.encoding编码格式一样,那么在控制台的输入与输出则不会乱码,对于通过get或post接收的数据则通过需要过滤器统一设置编码格式,见第5、6段的说明。

    我们常见的websphere、weblogic在linux下运行时,通常需要为java进程设置-Dfile.encoding参数就是这个原因。

    8、JDBC编码

    java程序与数据库的连接都是通过JDBC驱动程序来连接的,而JDBC驱动程序默认的是ISO-8859-1编码格式的,也就是说我们通过java程序向数据库传递数据时,JDBC首先会将Unicode编码格式的数据转换为ISO-8859-1的编码格式,然后在存储在数据库中,即在数据库保存数据时,默认格式为ISO-8859-1,如果数据库服务设定了字符集则会按设定的格式转化,或者在配置jdbc连接串时就需要指定连接的字符编码格式。

    所以统一都设置为UTF-8是个好方案。。。

    展开全文
  • 我们写代码有时候会出现这种情况:在自己电脑上运行的很...如何查看eclipse 中java项目的编码方式: 如图右击项目名称,然后选择propertices选项,就可以了 我的这个项目的默认编码方式是utf-8 ,下面对java...

    我们写代码有时候会出现这种情况:在自己电脑上运行的很正常,字符显示很完美,把自己的代码给别人或者换台机器运行,就会出现乱码的现象,这是为什么呢?都是编码方式在作祟,不同的机器或java项目可能使用的默认编码不同。

    如何查看eclipse 中java项目的编码方式:

    如图右击项目名称,然后选择propertices选项,就可以了

    我的这个项目的默认编码方式是utf-8 ,下面对java的编码方式总结一下,记录一下:

    import java.io.UnsupportedEncodingException;
    
    public class EncodeDemo {
    	public static void main(String[] args) throws UnsupportedEncodingException{
    		String s = "我爱ABC";
    		byte[] byte1 = s.getBytes();//以系统默认的编码方式转换为字节流
    		System.out.print("  默 认 编 码 输 出 :");
    		for(byte b : byte1){
    			System.out.print(Integer.toHexString(b & 0xff) + " ");
    		}
    		
    		System.out.print("\nutf-8编码输 出:");
    		byte[] byte2 = s.getBytes("utf-8");//以utf-8的编码转换
    		for(byte b : byte2){
    			System.out.print(Integer.toHexString(b & 0xff) + " ");
    		}
    		/*
    		 * 以上两个输出说明该工程使用的默认编码是utf-8
    		 * 该编码格式一个汉字栈占用三个字节,英文字母占用一个字节
    		 */
    		
    		System.out.print("\n  gbk编码输出:");
    		byte[] byte3 = s.getBytes("gbk");
    		for(byte b : byte3){
    			System.out.print(Integer.toHexString(b & 0xff) + " ");
    		}
    		/*
    		 * gbk编码格式,中文占两个字节,英文字母占一个字节
    		 */
    		
    		System.out.print("\nutf-16be输出:");
    		/*
    		 * java使用的双字节编码(utf-16be)
    		 * 中文英文都是两个字节
    		 */
    		byte[] byte4 = s.getBytes("utf-16be");
    		for(byte b : byte4){
    			System.out.print(Integer.toHexString(b & 0xff) + " ");
    		}
    		
    		/*
    		 * 当我们吧utf-16be编码格式的byte4转换为数组时,不指定编码方式,而是使用
    		 * 项目默认编码方式,发现打印出来的是乱码,之后将编码方式改为上面utf-16be的
    		 * 格式再打印发现没有乱码。同理,如果我们想将byte3转换为字符串再输出,则需要
    		 * 使用对应的gbk的编码方式,这样才不会乱码
    		 */
    		System.out.println();
    		String s1 = new String(byte4);//使用项目默认的编码(utf-8)
    		System.out.println(s1);
    		String s2 = new String(byte4,"utf-16be");
    		System.out.println(s2);
    	}
    }
    

    代码中b & 0xff 操作是为了去掉整数高24位多余的0,因为我们知道一个字节8位,而int是四个字节,所以byte转换为int后就变成了32位,但高24位都是0,影响视觉效果,所以用这个操作把它去掉就好了。输出结果如下图:

     

    展开全文
  • java编码规范考试题答案

    千次阅读 2021-03-08 08:48:11
    中软java编码规范考试题满分答案B. 无SSL传输通道或者代价太高C. 敏感数据需要持久化长久保存D. 同一信任域内组件间传递13. 下列JDK中的API调用中若使用不当易遭致OS命令注入的是BA. ...
  • 编码与解码 文章目录编码与解码前言一、什么是编码与...1610.3、UTF-810.4、BOM11、乱码的原因和可逆性11.1、乱码原因11.2、乱码可逆情况11.3、乱码不可逆情况三、Java的char字符四、String类1、编码的方法1.1、getByte
  • java对字符的编码处理

    千次阅读 2021-02-28 14:15:38
    java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。1. getBytes(charset)这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset...
  • Java实现Http URL地址编码

    千次阅读 2021-02-12 09:35:06
    请注意,以上大多数答案都是...URLEncoder用于将数据作为参数传递,而不是编码URL本身。换句话说,"http://search.barnesandnoble.com/booksearch/first book.pdf"是网址。例如,参数将是,"http://search.barnesand...
  • java进行url编码和解码

    千次阅读 2022-02-17 18:25:56
    public static String getURLEncoderString(String str) { String result = ""; if (null == str) { return "";... result = java.net.URLEncoder.encode(str, "UTF-8"); } catch (UnsupportedEncodin.
  • java查看当前系统的的编码方式

    千次阅读 2019-05-05 10:52:17
    java查看当前系统的的编码方式 public static void main(String[] args) { //查看当前系统的字符编码方式 System.out.println(Charset.defaultCharset().name()); //查看当前系统的编码方式 System.out.println...
  • Java获取文件编码格式

    千次阅读 2020-10-14 17:30:52
    import java.io.*; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.StandardCopyOption; public class FileCharsetCheckUtils { public static void main(String[] args) ...
  • java字符类型采用什么编码方式

    千次阅读 2021-02-12 15:06:53
    java 的字符类型采用的是 Unicode 编码方案。Java采用UTF-16编码作为内码,也就是说在JVM内部,文本是用16位码元序列表示的,常用的文本就是字符(char)和字符串(String)字面常量的内容。而,UTF-16是Unicode字符集的...
  • 一、查看Java源文件的编码方式用EditPlus打开Java源文件,点击菜单栏“File”——&gt;"Save as",弹出窗口。本例中是UTF-8编码,换做其他源文件,也可能会出现其他编码方式,如ANSI(中文操作系统中...
  • 详解Java中String类型与默认字符编码

    千次阅读 2021-02-12 18:02:17
    为什么写这个至于为什么要写这个...这次终于忍不住了,一定要弄个明白String类型的编码方式从网上查的资料都说,Java默认的字符编码是Unicode,而String类型的编码方式是与JVM编码方式和本机操作系统默认字符集有关...
  • Java——获取字符串编码格式

    千次阅读 多人点赞 2020-08-27 09:20:52
    判断一个字符串的编码格式: public static String getEncoding(String str) { String encode = "GB2312"; try { if (isEncoding(str, encode)) { // 判断是不是GB2312 return encode; } } catch (Exception ...
  • java和js相互base64编码解码

    热门讨论 2014-12-24 15:44:53
    我在网上找了半天的java、js的base64编码解码结果没有,只好自己写了,js一个文件,java一个文件,调用里面是使用方法
  • java获取文件编码格式

    万次阅读 2019-01-09 15:57:20
    java开发时在以流的方式读取文件内容时,往往会中文乱码,那么就要考虑到统一编码格式 InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding); 获得文件编码 /** * 获得文件...
  • 华为java编码规范模板

    热门讨论 2011-04-07 11:24:29
    华为java编码规范模板,让你的编码格式更加标准化。 通eclipse来导入两个文件。
  • java中的编码与解码

    万次阅读 2018-05-17 21:05:08
    编码表概述和常见的编码表 概述:有字符及其对应的数值组成的一张表 常见的编码表 ASCII:美国标准信息交换表 ISO8859-1:拉丁码表,欧洲码表 GB2312:中国的中文编码表 GBK:中国的中文编码表升级 GB18030:GBK的...
  • Java实现Unicode编码和中文互转

    千次阅读 2021-05-08 16:32:20
    Java实现Unicode编码和中文互转 1.中文字符串转换为Unicode编码 /** * 中文转Unicode * 其他英文字母或特殊符号也可进行Unicode编码 * @param cn * @return */ public static String cnToUnicode(String cn...
  • 导入依赖 <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId> <version>2.4.5</version> </dependency> <...
  • java判断文本文件编码格式

    万次阅读 2019-08-06 09:32:00
    上篇文章需要读取当前java或者配置文件的编码格式,这里主要支持UTF-8、GBK、UTF-16、Unicode等 /** * 判断文件的编码格式 * @param fileName :file * @return 文件编码格式 * @throws Exception */ ...
  • /* * 如果在调用FileOutputStream的构造方法时没有加入true,那么新加入的字符串就会替换掉原来写入的字符串, * 在调用构造方法时指定了字符的编码,新写入的字符,会使用新指定的编码 */ osw = new ...
  • Java编码和解码Unicode

    万次阅读 2018-03-13 15:09:54
    Java编码和解码Unicode
  • java中的url进行编码和解码

    千次阅读 2021-11-08 21:56:37
    编码和解码的类 java.net.URLDecoder.decode(url,解码格式) 解码器.解码方法。转化成普通字符串, URLEncoder.decode(url,编码格式) 将普通字符串变成指定格式的字符串, package com.zixue.springbootmybatis.test...
  • java安全编码指南之:字符串和编码

    万次阅读 2020-09-16 09:41:28
    字符串是我们日常编码过程中使用到最多的java类型了。全球各个地区的语言不同,即使使用了Unicode也会因为编码格式的不同采用不同的编码方式,如UTF-8,UTF-16,UTF-32等。 我们在使用字符和字符串编码的过程中会...
  • java 字符串编码转换的实现方法

    千次阅读 2022-04-13 10:49:59
    实现动态字符编码转换,解决乱码
  • java 识别文件的编码格式 读取文件的编码 utf-8 gbk gb2312 java 编码 java 获取文件编码格式 java 乱码查找

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 973,140
精华内容 389,256
关键字:

查看java 编码

java 订阅