字符串和文本

历史悠久的文本(可打印,即可显示的字符串)可能是用来表示信息最常用的方式。文本使用起来非常方便,因为人们习惯于处理各种各样以字符串形式表示的信息,如书本中,报纸中,以及电脑显示器上的信息。因此,只要我们指定如何对要传输的文本进行编码,我们就几乎能发送其他任何类型的数据:先将其表示成文本形式,再对文本进行编码。显然,我们可以将数字和boolean类型的数据表示成String类型,如"123478962","6.02e23","true","false"等。我们也已经看到,通过调用getBytes()方法,可以将一个字符串转换成字节数组(见TCPEchoClient.java)。当然,还有其他方法实现这个功能。

为了更好地理解这个过程,我们首先得将文本视为由符号和字符(characters)组成。实际上每个String实例都对应了一个字符序列(数组,char[]类型)。一个字符在Java内部表示为一个整数。例如,字符"a",即字母"a"的符号,与整数97对应;字符"X"对应了88,而符号"!"(感叹号)则对应了33。

在一组符号与一组整数之间的映射称为编码字符集(coded character set.)。或许你听说过ASCII编码字符集(ASCII,American Standard Code for Information Interchange,美国标准信息交换码)。ASCII码将英语字母、数字、标点符号以及一些特殊符号(不可打印字符)映射成0到127的整数。自20世纪60年代以来,ASCII码就被用来进行数据传输,甚至在今天,它也广泛应用在应用程序协议中,如HTTP(万维网所用的协议)。然而,由于它忽略了许多英语以外的其他语言所使用的符号,在如今全球化经济环境下,使用ASCII码来开发应用程序和设计协议就显得不够理想。

因此,Java使用了一种称为Unicode的国际标准编码字符集来表示char型和String型值。Unicode字符集将"世界上大部分的语言和符号"[ ]映射到整数0至65535之间,能更好地适用于国际化程序。例如,日文平假名中代表音节"o"的符号映射成了整数12362。Unicode包含了ASCII码:每个ASCII码中定义的符号在Unicode中所映射整数与其在ASCII码中映射的整数相同。这就为ASCII与Unicode之间提供了一定程度的向后兼容性。

发送者与接收者必须在符号与整数的映射方式上达成共识,才能使用文本信息进行通信。这就是他们所要达成一致的所有内容吗?还得根据情况而定。对于每个整数值都比255小的一小组字符,则不需要其他信息,因为其每个字符都能够作为一个单独的字节进行编码。对于可能使用超过一个字节的大整数的编码方式,就有多种方式在线路上对其进行编码。因此,发送者和接收者还需要对这些整数如何表示成字节序列统一意见,即编码方案(encodingscheme)。编码字符集和字符的编码方案结合起来称为字符集(charset,见RFC 2278)。你也可以定义自己的字符集,但没有理由这样做,世界上已经有大量不同的标准(standardized)字符集在使用。Java提供了对任意字符集的支持,而且每种实现都必须支持以下至少一种字符集:US-ASCII(ASCII的另一个名字),ISO-8859-1,UTF-8,UTF-16BE,UTF-16LE,UTF-16。

调用String实例的getBytes()方法,将返回一个字节数组,该数组根据平台默认字符集(default charset)对String实例进行了编码。很多平台的默认字符集都是UTF-8,然而在一些经常使用ASCII字符集以外的字符的地区,情况有所不同。要保证一个字符串按照特定(particular)字符集编码,只需要将该字符集的名字作为参数(String类型)传递给getBytes()方法,其返回的字节数组就包含了由指定字符集表示的字符串。(注意,在第2.2.1节的TCP回显客户端/服务器示例程序与编码是无关的,因为它们根本没有对接收到的数据进行解释。)

下面举例来对getBytes()方法进行说明。如果在著作本书的平台上调用"Test!".getBytes(),你将获得按照UTF-8字符集编码的字节数组;然而如果你调用"Test!".getBytes("UTF-16BE"),

你将得到如下数组:在这种情况下每个值被编码成了两个字节的序列,高位在前;

如果调用 "Test!".getBytes("IBM037"),返回结果将是:

上面的例子说明,发送者和接收者必须在文本字符串的表示方式上达成共识。最简单的方法就是定义一个标准字符集。

我们知道,可以通过先将字符串转换成独立的字节,再将其写到流中的方式,把String写入到OutputStream中去。这个方法在每次调用getBytes()方法时,都得指定编码方式。在本章后续内容中,我们将看到只需要简单指定一次编码就能构建文本消息的方法。

相关下载:

Java_TCPIP_Socket编程(doc)

http://download.csdn.net/detail/undoner/4940239

文献来源:

UNDONER(小杰博客) :http://blog.csdn.net/undoner

LSOFT.CN(琅软中国) :http://www.lsoft.cn

转载于:https://www.cnblogs.com/wuyida/archive/2012/12/19/6301081.html

信息编码:字符串和文本相关推荐

  1. c++ string分割字符串split_python 字符串和文本处理

    字符串和文本处理 字符串是一种重要的数据形式,有价值的程序都会涉及到对于字符串的处理.幸运的是,强大的python内置了很多函数,来帮助我们解析和处理字符串.本文会涉及到字符串编码,简单的字符串处理函 ...

  2. unity中链接字符串和变量显示_理解Unity中的优化(六):字符串和文本

    字符串和文本: 在Unity项目中,处理字符串和文本经常会产生性能问题.在C#中,字符串是不变的.任何对字符串的操作都会重新分配新的字符串,这个代价是非常昂贵的.如果在多重循环中重复地执行字符串连接操 ...

  3. Task 02:数学运算、字符串和文本、列表

    文章目录 前言 一.实现第一行代码和认识注释 二.数学运算 字符串和文本 1.认识运算符 2.自我练习 三.字符串和文本 1.字符串的引用 2.输入一整段字符串.变量和格式 四.列表 总结 前言 这部 ...

  4. Python实战之字符串和文本处理

    写在前面 博文为<Python Cookbook>读书后笔记整理 涉及内容包括: 使用多个界定符分割字符串 字符串开头或结尾匹配,用Shell通配符匹配字符串 字符串匹配和搜索和替换(忽略 ...

  5. 零基础学python编程思维---Task2 数学运算、字符串和文本、列表

    Task2 数学运算.字符串和文本.列表 一.基础部分 1.实现第一行代码和认识注释 print('hello world') 注释是由# 加相关备注,其目的就是其他开发者能够轻松的了解代码,注释不影 ...

  6. Excel拼接后的字符串复制文本到word中出现换行符

    Excel拼接后的字符串复制文本到word中出现换行符 现象描述 Excel拼接字符串 word中粘贴出现换行 解决办法 现象描述 需要将几百个数据需要放入代码中. 将excel中的数据拼接好后,粘贴 ...

  7. 【Linux】 字符串和文本处理工具 grep sed awk

    Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...

  8. 重温CLR(十) 字符、字符串和文本处理

    本章将介绍.net中处理字符和字符串的机制 字符 在.NET Framewole中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发. 每个字符都表示成System.Char结构 ...

  9. python字符串与文本处理技巧(4): 格式化输出、令牌解析、串上串

    1. 以指定列宽格式化字符串 很多情况下,我们有一些长字符串,想以指定的列宽将它们重新格式化. textwarp() import textwrap import oss = "Look i ...

最新文章

  1. numpy逻辑运算符
  2. 一步一步将自己的代码转换为观察者模式
  3. 下巴长痘痘是什么原因?要怎么解决?(实用教程)
  4. 计算机在管理会计中的应用毕业论文,计算机在管理会计中的应用写毕业论文用的,帮帮找..._中级会计职称_帮考网...
  5. android tab 点击,TabLayout.Tab点击事件
  6. Win11重磅新功能推送!
  7. 光端机的分类有哪些?
  8. 【转】DCMTK开源库的学习笔记4:利用ini配置文件对dcm影像进行归档
  9. 国密算法SM2-java实现
  10. 题目1006:ZOJ问题
  11. 强悍的命令行 —— less(与 more、cat 的区别)
  12. three.js 几何体-组合网格_张柏芝西装穿出性感范,清纯白配黑色网格,这造型一般人挺难驾驭...
  13. 196.删除重复的电子邮箱
  14. Hadoop学习总结之Map-Reduce的过程解析
  15. 目标检测---数据集格式转化及训练集和验证集划分
  16. 音频-什么是PCM编码格式?
  17. Office Professional Plus 2010 产品密钥
  18. 如何计算近似纳什均衡_澳洲计算机网络安全课程之-莫纳什大学硕士课程
  19. python少儿编程008:海龟绘图画出奥运五连环!
  20. PowerPC下PCI、PCI-E设备的配置空间

热门文章

  1. TensorFlow tf.keras.layers.RNN
  2. C++ 深拷贝和浅拷贝
  3. shell 执行脚本
  4. scipy.stats.norm
  5. oracle linux hugepage,LInux下为什么配置HugePages及配置步骤
  6. consul java 注册中心_Spring Cloud微服务架构实战之Consul注册中心02:consul入门案例...
  7. VMware vSAN性能测试那点后续的事
  8. CDN > 域名管理 > 访问控制 > URL鉴权配置 > URL鉴权
  9. 安装VCSA6.7(vCenter Server Appliance 6.7) 2019.7.9
  10. stlink 升级固件以后失败_用户必看 | 直玩小程序发布!固件更新通知!