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

iis 配置网站详解电脑平面设计培训班多少钱

iis 配置网站详解,电脑平面设计培训班多少钱,wordpress无法管理站点,网站建设的需求怎么写一、charAt 与 codePonitAt我们知道 Java 内部使用的是 utf-16 作为它的 char、String 的字符编码方式#xff0c;这里我们叫它内部字符集。而 utf-16 是变长编码#xff0c;一个字符的编码被称为一个 code point#xff0c;它可能是 16 位 —— 一个 code unit#xff0c;…一、charAt 与 codePonitAt我们知道 Java 内部使用的是 utf-16 作为它的 char、String 的字符编码方式这里我们叫它内部字符集。而 utf-16 是变长编码一个字符的编码被称为一个 code point它可能是 16 位 —— 一个 code unit也可能是 32 位 —— 两个 code unit。Java 的 char 类型长度为二字节它对应的是 code unit。换句话说一个字符的编码可能需要用两个 char 来存储。作为一个输入法爱好者我偶尔会编程处理一些生僻字。其中有些生僻字大概是后来才加入 unicode 字符集里的直接用 charAt 方法读取它们会得到一堆问号。原因很清楚 —— 因为这些字符(eg. )是用两个 code unit也就是两个 char 表示的。charAt 找不到对应的编码就会将这些 char 输出成「?」。//示例public class Test {public static void main(String[] args){String s ;System.out.println(s.length()); //输出2System.out.println(s.charAt(0)); //输出?System.out.println(s.charAt(1)); //输出?}}因此涉及到中文一定要使用 String 而不是 char并且使用 codePoint 相关方法来处理它。否则的话如果用户使用了生僻字很可能就会得到不想要的结果。下面是一个使用 codePoint 遍历一个字符串的示例需要注意的是codePoint 是 int 类型的(因为 char 不足以保存一个 codepoint)因此需要做些额外的转换public class Test {public static void main(String[] args){String s 赵孟孟;for (int i 0; i s.codePointCount(0,s.length()); i) {System.out.println(new String(Character.toChars(s.codePointAt(i))));// 这里的轨迹是类型为 int 的 codepoint - char数组 - String}}}/* 结果赵孟?*/问题来了「」这个字是正常地输出了可最后的「孟」却变成了黑人问号。。原因就在于 codepointAt(i) 是以 char 偏移量索引的。。所以只是这样输出也是不行的。。正确的遍历姿势是这样的final int length s.length();for (int offset 0; offset length; ) {final int codepoint s.codePointAt(offset);System.out.println(new String(Character.toChars(codepoint)));offset Character.charCount(codepoint);}这个代码保持了一个变量offset, 来指示下一个 codepoint 的偏移量。最后那一句在处理完毕后更新这个偏移量而 Java 8 添加了 CharSequence#codePoints 该方法返回一个 IntStream该流包含所有的 codepoint。可以直接通过 forEach 方法来遍历他。string.codePoints().forEach(c - System.out.println(new String(Character.toChars(c))););或者用循环for(int c : string.codePoints().toArray()){System.out.println(new String(Character.toChars(c)));}二、内部字符集与输出字符集(内码与外码)现在我们知道了中文字符在 java 内部可能会保存成两个 char可还有个问题如果我把一个字符输出到某个流它还会是两个 char也就是 4 字节么回想一下Java io 有字符流字符流使用 jvm 默认的字符集输出而若要指定字符集可使用转换流。因此一个中文字符在内部是使用 utf-16 表示可输出就不一定了。来看个示例import java.io.UnsupportedEncodingException;public class Test {public static void main(String[] args)throws UnsupportedEncodingException {String s 中; //System.out.println(s : chars: s.length());System.out.println(s : utf-8 bytes: s.getBytes(utf-8).length);System.out.println(s : unicode bytes: s.getBytes(unicode).length);System.out.println(s : utf-16 bytes: s.getBytes(utf-16).length);}}输出为中: chars: 1 // 2 bytes中: utf-8 bytes:3中: unicode bytes: 4中: utf-16 bytes: 4: chars: 2 // 4 bytes: utf-8 bytes:4: unicode bytes: 6: utf-16 bytes: 6一个「中」字内部存储只用了一个 char也就是 2 个字节。可转换成 utf-8 编码后却用了 3 个字节。怎么会不一样呢是不是程序出了问题当然不是程序的问题这是内码(utf-16)转换成外码(utf-8)字符集发生了改变所使用的字节数自然也可能会改变。(尤其这俩字符集还都是变长编码)三、utf-16、utf-16le、utf-16be、bom不知道在刚刚的示例中你有没有发现问题同是 utf-16为何「中」和「」的 s.getBytes(utf-16).length 比 s.length 要多个 2开头就说了 String 也是 utf-16 编码的这两个数应该相等才对不是吗原因在于utf-16 以 16 位为单位表示数据而计算机是以字节为基本单位来存储/读取数据的。因此一个 utf-16 的 code unit 会被存储为两个字节需要明确指明这两个字节的先后顺序计算机才能正确地找出它对应的字符。而 utf-16 本身并没有指定这些所以它会在字符串开头插入一个两字节的数据来存储这些信息(大端还是小端)。这两个字节被称为BOM(Byte Order Mark)。刚刚发现的多出的两字节就是这么来的。如果你指定编码为 utf-16le 或 utf-16be就不会有这个 BOM 的存在了。这时就需要你自己记住该文件的大小端。。四、更多utf-8 unicode在 windows 中utf-8 格式的文件也可能会带有 BOM但 utf-8 的基本单位本来就是一个字节因此它不需要 BOM 来表示 所谓大小端。这个 BOM 一般是用来表示该文件是一个 utf-8 文件。不过 linux 系统则对这种带 BOM 的文件不太友好。不般不建议加。。(虽如此说上面的测试中utf-8 的数据应该是没加 bom 的结果)unicode字符集UCS(Unicode Character Set) 就是一张包含全世界所有文字的一个编码表但是 UCS 太占内存了所以实际使用基本都是使用它的其他变体。一般来说指定字符集时使用的 unicode 基本等同于 utf-16.(所以你会发现第二节演示的小程序里utf-16 和 unicode 得出的结果是一样的。)四、与 Python3 对比python3 在字符串表示上做了大刀阔斧的改革python3 的 len(str) 得到的就是 unicode 字符数因此程序员完全不需要去考虑字符的底层表示的问题。(实际上其内部表示也可能随着更新而变化)带 BOM 的 utf-8 也可通过指定字符集为 utf-8-sig 解决。若需要做字符集层面处理需要 encode 为特定字符集的 byte 类型。Encoding pertains mostly to files and transfers. Onceloaded into a Python string, text in memory has no notion of an “encoding,” and issimply a sequence of Unicode characters (a.k.a. code points) stored generically.-- Learning Python 5thP.S. Python2 存在和 Java 相同的问题参考本文允许转载但要求附上源链接Java 中文编码分析
http://www.sadfv.cn/news/426233/

相关文章:

  • 零购物网站怎么建设免费企业网站建立
  • 医院做网站做网站属于无形资产还是费用
  • 浙江省建设协会网站韩国大型门户网站
  • wordpress 压缩网站打开网站弹出qq对话框
  • 做网站建设的公司沈阳哪里做网站
  • 北京网站建设成都公司ui设计怎么自学
  • 网站建设 服务内容 费用工作台
  • 建设一个视频网站需要什么电影网站页面seo
  • 有哪些网站可以做笔译WordPress 页码固定
  • 网站建设运营方案 团队湖南建设厅官网平台
  • 网站建设公司yu三亚市城乡建设局网站
  • 流量网站建设长春快速建站模板
  • 专业网站建设公司兴田德润放心骏域网站建设专家电话
  • 郑州网站设计报价表新乡网站建设哪家优惠
  • 有没有专门做京东天猫的人才网站三亚百度推广地址
  • 网站建设的重点难点域名空间网站推广
  • 网站建设和后台空间管理关系网站建设就业
  • 餐饮网站系统手机网站字体自适应
  • 征婚网站上拉业务做恒指期货pc 手机网站 微站
  • wordpress前端修改seo常用工具网站
  • 安阳网站建设策划织梦cms做网站教程视频
  • 怎么建立挣流量的网站公司规划发展计划书
  • 展示型外贸网站建设怎么做根优酷差不多的网站
  • 搞一个卖东西的网站怎么做短视频app软件下载大全
  • 文化馆网站建设方案外贸英语学习网站
  • 石家庄做网站电话河南网站优化公司
  • 新的网站建设甘肃seo网站
  • 苏州制作网站哪家好成都发现6例阳性
  • 做h5哪个网站好网站制作流程
  • 西安网站建设联系方式广告软文营销平台