当前位置: 首页 > news >正文

外贸原单童装哪个网站做建购物网站的详细步骤

外贸原单童装哪个网站做,建购物网站的详细步骤,新手建站详细步骤,长沙经开区建管站目录 1. 概述 2. 编码基本知识 2.1. iso8859-1 2.2. GB2312/GBK 2.3. unicode 2.4. UTF 3.JAVA中移位运算>> , << , >>> 3.1. 左移<< 3.2. 右移 3.3. 无符号右移>>> 4. JAVA获取文件编码 4.1. 通过文件的前三个字节来判断 4.2…

目录

1. 概述

2. 编码基本知识

2.1. iso8859-1

2.2. GB2312/GBK

2.3. unicode

2.4. UTF

3.JAVA中移位运算>> , << , >>>

 3.1. 左移<<

3.2. 右移

3.3. 无符号右移>>>

4. JAVA获取文件编码

4.1. 通过文件的前三个字节来判断

4.2. 判断前三个字节出错率还是蛮大的,还可以进一步读取文件的字段,进行特殊编码字符的判断来确定文件编码

4.3. 通过工具库cpdetector来获取文件编码


1. 概述

在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示"。

2. 编码基本知识

最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。

2.1. iso8859-1

属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母'a'的编码为0x61=97。很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然"中文"两个字不存在iso8859-1编码,以gb2312编码为例,应该是"d6d0 cec4"两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节"e4 b8 ad e6 96 87"。很明显,这种表示方法还需要以另一种编码为基础。

2.2. GB2312/GBK

这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和iso8859-1一致(兼容iso8859-1编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。

2.3. unicode

这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。不过,相对于iso8859-1编码来说,unicode编码只是在前面增加了一个0字节,比如字母'a'为"00 61"。
需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而unicode又可以用来表示所有字符,所以在很多软件内部是使用unicode编码来处理的,比如java。

2.4. UTF

考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。
注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。

3.JAVA中移位运算>> , << , >>>

十进制12345的二进制表达式如下图:

 3.1. 左移<<

 左移一位相当于乘2,右移相当于除2。但是当左移18位后,首位是1,是负数。

 当左移18位后,变成了负数,而当右移20位时又变成了整数,移位运算和乘2不是完全一样的。

那么问题来了,对于int类型进行移位运算,左移32位是不是在右边直接补32个0呢?结果是不是0呢?

答案肯定不是这样的。当位数超出int类型32位时,先进行求余数,移动的位数%32。<<36和<<4是一样的。

3.2. 右移

无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的 在右移运算符中,右移后补0,是由于正数 12345 符号位为0 ,如果为1 则应补1

3.3. 无符号右移>>>

无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的

4. JAVA获取文件编码

ANSI: 无格式定义  
Unicode:  前两个字节为FFFE Unicode文档以0xFFFE开头
Unicode big endian: 前两字节为FEFF  
UTF-8: 前两字节为EFBB UTF-8以0xEFBBBF开头

4.1. 通过文件的前三个字节来判断

public static String codeString(String fileName) throws Exception {BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));int p = (bin.read() << 8) + bin.read();bin.close();String code = null;switch (p) {case 0xefbb:code = "UTF-8";break;case 0xfffe:code = "Unicode";break;case 0xfeff:code = "UTF-16BE";break;default:code = "GBK";}return code;}

4.2. 判断前三个字节出错率还是蛮大的,还可以进一步读取文件的字段,进行特殊编码字符的判断来确定文件编码

 /*** 判断文本文件的字符集,文件开头三个字节表明编码格式。 * @param path* @return* @throws Exception* @throws Exception*/public static String charset(String path) {String charset = "GBK";byte[] first3Bytes = new byte[3];try {boolean checked = false;BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));bis.mark(0); // 读者注: bis.mark(0);修改为 bis.mark(100);我用过这段代码,需要修改上面标出的地方。 int read = bis.read(first3Bytes, 0, 3);if (read == -1) {bis.close();return charset; // 文件编码为 ANSI} else if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {charset = "UTF-16LE"; // 文件编码为 Unicodechecked = true;} else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1] == (byte) 0xFF) {charset = "UTF-16BE"; // 文件编码为 Unicode big endianchecked = true;} else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB&& first3Bytes[2] == (byte) 0xBF) {charset = "UTF-8"; // 文件编码为 UTF-8checked = true;}bis.reset();if (!checked) {while ((read = bis.read()) != -1) {if (read >= 0xF0)break;if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBKbreak;if (0xC0 <= read && read <= 0xDF) {read = bis.read();if (0x80 <= read && read <= 0xBF) // 双字节 (0xC0 - 0xDF)// (0x80 - 0xBF),也可能在GB编码内continue;elsebreak;} else if (0xE0 <= read && read <= 0xEF) { // 也有可能出错,但是几率较小read = bis.read();if (0x80 <= read && read <= 0xBF) {read = bis.read();if (0x80 <= read && read <= 0xBF) {charset = "UTF-8";break;} elsebreak;} elsebreak;}}}bis.close();} catch (Exception e) {e.printStackTrace();}System.out.println("--文件-> [" + path + "] 采用的字符集为: [" + charset + "]");return charset;}

4.3. 通过工具库cpdetector来获取文件编码

public static String getFileCharset(String filePath) throws Exception {CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();/*ParsingDetector可用于检查HTML、XML等文件或字符流的编码,* 构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。*/detector.add(new ParsingDetector(false));/*JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码测定。* 所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,* 比如下面的ASCIIDetector、UnicodeDetector等。*/detector.add(JChardetFacade.getInstance());detector.add(ASCIIDetector.getInstance());detector.add(UnicodeDetector.getInstance());Charset charset = null;File file = new File(filePath);try {//charset = detector.detectCodepage(file.toURI().toURL());InputStream is = new BufferedInputStream(new FileInputStream(filePath));charset = detector.detectCodepage(is, 8);} catch (Exception e) {e.printStackTrace();throw e;}String charsetName = "GBK";if (charset != null) {if (charset.name().equals("US-ASCII")) {charsetName = "ISO_8859_1";} else if (charset.name().startsWith("UTF")) {charsetName = charset.name();// 例如:UTF-8,UTF-16BE.}}return charsetName;}
http://www.yayakq.cn/news/116163/

相关文章:

  • php后台网站开发教程做家乡特产的网站
  • 自己建设网站在哪里建设全屏幕网站模板
  • 支付宝网站支付接口餐厅设计
  • 网站设计公司哪家专业关键词百度网盘
  • 网站建设和管理工作文安做网站
  • 电子商务网站系统吉林网站网站建设
  • 企业官方网站建设运营方案高仿微博wordpress
  • 网站优化三要素岳阳网站界面设计
  • 青岛经纬建设工程有限公司网站赣州睿行网络科技有限公司
  • 固原微信网站建设博物馆展柜
  • 做外贸网站的都有哪些类型的公司网站建设的总结100字
  • 网站后台是什么网页布局的基础是几列布局
  • 在线电子书网站怎么做柒比贰Wordpress破解版
  • 网站改版的seo注意事项南宁网站建设托管
  • 设计网站一般多少钱wordpress可以做博客吗
  • 临沂门户网站制作互联网推广是做什么的
  • 秦皇岛网站开发费用品牌建设营销
  • 建设网站团队游戏页面
  • 平顶山做网站的公司网站轮播怎么做
  • 响应式网站开发周期wordpress安装一下
  • 网站建设天猫店保定网站设计多少钱
  • 南岗区城市管理与建设网站网站不见了
  • 表单大师 做网站工图网
  • 怎么把个人做的网站发布到网上做新房什么网站好
  • 网站安全检测漏洞扫描风险等级企业网站可以自己做吗
  • 餐厅网站建设策划方案宁波论坛天一楼市
  • 重庆建网站价格购买高仿手表网站
  • 做彩票网站代理犯法吗6如何自己制作公众号
  • 电子商务毕业设计设计电商网站建设建网站是什么专业类别
  • 福建省建设继续教育网站加强财政门户网站建设工作