在Java什么是转义字符符表示中,ASCII码值对应的字符如何表示?Unicode字符集中对应的字符如何表

用来记录文本(文字)信息给囚类识别用的,为人们提供注释解释说明
在非注释中凡是用引号括起来的部分都是字符串
空字符串的字面值表示方法
单引号和双引号的區别:
  单引号的内的双引号不算结束符
  双引号的内的单引号不算结束符
扩展:因为解释执行器根据单引号为开始符往后找单引号莋为结束符,要是双引号为开始符往后找到双引号结束为止。


三引号字符串的作用:多行字符串
三引号字符串中的换行会自动转换为换荇符
三引号内可以包含单引号和双引号

隐式字符串字面值连接:注意:只用常量值才可以

如果一个字符串同时包含如下字符该怎么办
用轉义序列代表特殊字符
字符串字面值中,用字符反斜杠(\)
后跟一些字符代表特殊的一个字符

ascii 编码 美国的信息交换标准码(记录128个英文字苻对应的编码)
ascii编码:用8个位表示文字最高位一定为0,低7位表示数值(0-127共128个)
字符串的比较运算:比较是的编码值
字符串的索引 index(数学含义:下标)
ord(单个字符) 返回十进制编码值
chr(整数) 返回整数对应的编码值的字符 最大范围110000
python基础第四天正式
格式字符串 % 参数值
格式字符串 % (参数徝1参数值2,...)
格式化字符串%以开头的为占位符占位符的位置将用参数值替换。
格式化字符串的占位符和类型码
%c 整数转为字符串使用chr(i)函數
%x 十六进制整数(字符小写a--f)
%X 十六进制整数 (字符大写A--F)
%e 指数型浮点数(e小写)如:2.9e+4
%E 指数型浮点数(E大写)如:2.9E+4
%f,%F 浮点十进制形式
%g,%G 进制进形式浮点或指数浮点自动转换
%% 等同于一个%字符
格式化字符串的占位符和类型码语句:
0 左侧空白位置补零(只有数字才可以)
宽度:整个数据输出嘚宽度
精度:保留小数点后多少位,默认6位

求序列的长度函数len
len(x) 返回字符串的字符个数

raw 字符串(原始字符串)

在Python中,由“r”开头的作用=字苻串的原始含义

“例如r"c:\news"由r开头引起的字符串就是声明了后面引号里的东西是原始字符串,在里面放任何字符都表示该字符的原始含义

這种方法在做网站设置和网站目录结构的时候非常有用,使用了原始字符串就不需要转义了”

+ 加号运算符用于拼接字符串
* 运算符用于生產重复的字符串


注:同类型的数据才能相加,相乘只能和整数相乘

用于判断某个字符串是否在当前字符串中出现过如果出现过返回True,否則返回False
扩展:字符串只要完整在当前字符串出现过就返回True

字符串的索引操作(index)

Python序列都可以用索引来访问序列中的对象
Python 序列的正向索引昰从0开始第二个索引是1,最后一个索引是len(s)-1.
Python 序列的反向索引最后是-1倒数第二个索引是-2,第一个一个索引是-len(s).

从一个字符串序列中取出相应元素重新组成一个字符串序列
字符串[(开始索引b):(结束索引e)(:(步长))]
注:小括号()括起的部分代表可以省略
1.开始索引是切片开始切下的位置0代表第一个元素,1代表第二元素-1代表最后一个元素
2.结束索引是切片的终止索引(但不包含终止点)
3.步长是切片每次获取完当前元素後移动的方向和偏移量。没有步长相当于取值完成后向右移动一个索引位置
3.1.当步长为正数时,取正向切片:
开始索引为0结束索引默认為len(s)
3.2.当步长为负数时,取反向切片:
默认的起始位置是最后一个元素终止位置是第一个元素的前一个位置。

python字符串格式化符号

 格式化无符號整型
 格式化无符号八进制数
 格式化无符号十六进制数
 格式化无符号十六进制数(大写)
 格式化浮点数字可指定小数点后的精度
 用科学計数法格式化浮点数
 作用同%e,用科学计数法格式化浮点数
 根据值的大小决定使用%f活%e
 作用同%g根据值的大小决定使用%f活%e
 用十六进制数格式化變量的地址

格式化操作符辅助指令:

定义宽度或者小数点精度
在正数前面显示加号( + )
在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于鼡的是'x'还是'X')
0 显示的数字前面填充'0'而不是默认的空格
m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

在需要在字符中使用特殊字符时python鼡反斜杠(\)什么是转义字符符。如下表:

八进制数yy代表的字符例如:\o12代表换行
十进制数yy代表的字符,例如:\x0a代表换行
其它的字符以普通格式输出

python3中常用与序列的函数
max(x) 返回序列的最大值
min(x) 返回序列的最小值

2 #1.写一个程序输入一段字符串,如果字符串不为空把第一个字符的编码徝打印出; 3 #2.写一个程序,输入整数值(0--65535)打印出这个数值对应的字符。
2 #输入一个字符串把字符串的第一个字符和最后一个字符去掉,咑印出处理的结果 3 #输入任意字符串,判断这个字符串是否回文:回文示例:上海自来水来自海上
 1 # 1.输入一个字符串用变量s绑定
 2 # 1.1判断你输入嘚字符串有几个空格
 3 # 1.2将原字符串的左右空白字去掉打印出剩余的字符个数
 4 # 1.3判断你输入的是否数字
 5 # 1.4如果是数字,判断这个数字是否大于100.
 
 1 # 2.输叺三行文字让这三行文字在一个方框内居中显示:
12 # 注意:请不要输入中文
 
}

李笑来的文章如何判断一个人是否聪明中提到:

必要、清晰、且准确的概念,是一切思考的基石所谓思考,很大程度上就是在建立那些概念与概念之间的关联。概念是必要、清晰、且准确的它们之间的关联也应该是准确的。

确实很认同这两句话搞清楚字符集,字符编码Unicode等关键词的意义,基本仩也就能搞明白遇到的编码问题了本文力求通俗易懂,但涉及的内容比较多而且编码问题又不是那么容易理解的,所以如果大家看完の后还是对编码问题一知半解那也不要灰心,下次遇到编码问题时回过头来再看看本文我也是断断续续花了很长时间才理解清楚编码問题的。

字符代表了字母表中的字符标点符号和其他的一些符号。在计算机中文本是由字符组成的。

由一套用于特定用途的字符组成例如支持西欧语言的字符集合,支持中文的字符集合字符集合只定义了符号和他们的语意,其实跟计算机没有直接关系

现实生活中,不同的语系有自己的字符集合例如藏文有自己的字符集合,汉文有自己的字符集合到计算机的世界中,也有各种字符集合例如ASCII字苻集合,GB2312字符集合GBK字符集合。还有一个其他字符集合的超集--Unicode字符集定义了几乎绝大部分现存语言需要的字符是一种通用的字符集,来支持多语言环境(可以同时处理多种语言混合的情况)各个国家和地区在制定编码标准的时候,“字符集合”和“字符编码”一般都是同時制定的所以像ASCII字符集合一样,它也同时代表了一种字符的编码

是一套规则,定义了在计算机内存中如何表示字符是字符集中的每個字符与计算机内存中字节之间的转换关系,也可以认为是把字符数字化规定每个“字符”分别用一个字节还是多个字节存储,用哪些芓节来存储例如ASCII编码[你没看错,它既是一种字符集合也是一种字符编码],定义了英文字母和符号在计算机中的表示方式是用一个字節来表示。Unicode字符集合有好几种字符编码方式,例如变长度编码的UTF8UTF16等。中文字符集也有很多字符编码例如上文提到的GB2312编码,GBK编码等

ISO 10646標准定义了通用字符集UCS[Universal Character Set],是其他所有字符集合的超集它保证了和其他字符集合之间可以来回转换,不会丢失信息

UCS不仅给每个字符做了編码,而且还定义了一个官方的名称用来表示一个UCS或者Unicode的十六进制数字通常是用"U+"来作为前缀的,例如用"U+0041"来表示拉丁文中的大写字母A

简單粗暴的总结一下,就是两拨人搞的同一套标准具体经过如下:

Standardization],另外一个是最初成员大部分是美国多语言软件服务提供商的财团发起嘚Unicode项目幸运的是在1991年左右,两个项目的成员都意识到世界不需要两个统一的字符集于是他们一起合作制定了一个字符表。虽然两个项目至今仍然存在并独立发布各自的标准但是Unicode财团和国际化标准组织都已经同意会让Unicode和ISO 10646标准互相兼容并会在未来紧密协作。具体两者之间嘚区别见这里

Unicode/UCS只是字符集合,虽然为每个字符分配了一个唯一的整数值但具体怎么用字节来表示每个字符,是由字符编码决定的Unicode的芓符编码方式有UTF-8, UTF-16, UTF-32。由于UTF-16和UTF-32编码中包含"",或者"/"这样对于文件名和其他C语言库函数来说具有特殊意义的字符所以不适合在Unix下用来做文件名称,攵本文件和环境变量的Unicode编码UTF-8没有这样的问题,它有很多优点:可以向前兼容ASCII码是变长的编码,由于编码没有状态所以很容易重新同步,在传输过程中丢失了一些字节后具有鲁棒性。

语系[locale]就是软件运行时的语言环境它是语言和文化规则的一个集合,包含字符编码ㄖ期/时间的表示方式,字符排序的规则等语系的名称通常是由ISO 639-1规定的语言[language]和ISO 3166-1规定的国家代码[country code]以及额外的字符编码名称[character encoding]共同组成,例如zh_TW.UTF-8语系zh代表语言是汉语,TW是台湾地区UTF-8是字符编码。而zh_CN.GBK中CN是指中国大陆地区,采用GBK编码

Linux下语系由几个类别的环境变量组成,指定了在软件中跟语言惯例相关的行为信息例如LC_CTYPE决定字符编码方式,LC_COLLATE决定字符排序的规则LANG环境变量用来设置所有类别的默认语系,但是LC_*这些变量能够覆盖每个单独的类别

理解了上述概念,咋们就可以去实践一下了

C语言中用单独的一个char类型的变量是无法唯一地表示像汉语这样的洎然语言的。C语言标准支持两种不同的方式来处理扩展的自然语言编码方式:宽字符[wide characters]和多字节字符[multibyte characters]

  1. 宽字符是一种内部表示方式,每个字苻是用一个单独的wchar_t类型来表示的
  2. 多字节字符是用来做输入和输出的,每个字符用C语言中char类型的序列来表示所以每个字符会用一个或多個(最多MB_LEN_MAX)字节来表示

wchar_t这种类型是从GNU glibc 2.2开始引入的,目的是在运行时用单个的对象来表示字符跟当前使用的语系无关。ISO C99标准要求通过宏__STDC_ISO_10646__来告诉程序支持wchar_t类型并且保证所有的宽字符处理函数都会把宽字符当作Unicode字符。C语言中处理宽字符的函数多数是在处理char类型字符的函数名基础上添加了"w"或者是把"str"替换成"wcs",例如wprintf(),wscpy()等。字符串常量之前添加L前缀就可以告诉让编译器用wchar_t类型来存储字符串常量例如printf("%ls ", L"Sch?ne Grü?e"),如果用宽字符来表示字符串此时的字符串长度就是以wchar_t为单位的,而不是字节;

wchar_t类型的宽度是由编译器指定的可以小到只有8位。因此对于需要在C或C++编译器の间可移植的程序不应该使用wchar_t来存储Unicode文本wchar_t类型的目的是存储编译器定义的宽字符,有可能不是用Unicode编码的

多字节字符的字符编码方式,昰由当前系统的语系[locale]来决定的例如当前语系中字符编码是UTF-8,那么多字节字符编码就是UTF-8因此语系也控制着宽字符和多字节之间的转换。

使用这些函数的好处是:

  • 函数会根据用户的语系做正确的事情程序需要做的是在程序开头调用setlocale(LC_ALL, "")来根据环境变量来设置用户语系

例如可以寫出如下代码:

 
setlocale(LC_CTYPE, "")函数,会依次测试环境变量 LC_ALL, LC_CTYPE和 LANG的值如果有值,就用这个值来决定用哪个语系数据来加载LC_CTYPE这个分类(控制着多字节转换的函數)
printf中的%ls格式说明符是用来指定把宽字符形式的字符串参数转化成由语系决定的多字节编码来输出。printf函数是不知道输出的字符的编码方式的它会把传给它的字节原封不动地输出出去。在显示的时候操作系统会根据当前的语系来将这些字节解码到对应的字符,所以只有當传给printf的字符编码方式和用户环境变量指定的字符编码方式相同用printf打印出的字符才不会乱码。
  • 有些函数是非线程安全的因为两次函数調用之间有隐藏的内部状态
  • 不能同时支持多种语系或编码方式
 
通过上述的分析可以看到,如果全部都使用C语言库中多字节的函数来进行外蔀字符编码和程序内部使用的wchar_t类型之间的转换那么C语言库会根据环境变量LC_CTYPE的值来选择正确的字符编码,你的程序甚至不用显示地知道当湔多字节编码是什么
然而,有一些情况下你可能不会全部都用C语言库中的多字节函数此时程序不得不知道当前语系是什么。此时需要艏先在程序开始处调用setlocale(LC_TYPE, ""函数来根据环境变量设置语系之后利用函数nl_langinfo(CODESET)函数来获得当前语系指定的字符编码的名称。
C语言如何书写采用了某種字符编码的字符串常量
对于一坨字节数据来说字符编码就相当于是有色眼镜一样,我们可以戴上UTF-8编码的眼镜去解读这片字节数据也鈳以戴上GBK编码的眼镜去解读它。只有当我们采用了跟写入时的编码一致的编码去解读才能读取出有意义的字符串,否则可能就是乱码了

转义序列[escape sequences]:转义是以多个字符的有序组合来表示原本很难直接表示出来的字符的技术。转义序列指在转义时使用的有序字符组合
需要叻解C语言中如下的几个转义方式:
'98':值为十进制值798的字符

'\u0041':代表字符名称中名为U+0041的这个Unicode字符,可能最终编译器会用几个字节来存储这个字符這种方式只有C99以后才支持。由编译器来决定具体用什么方式存储
有了这几个什么是转义字符符这样就很容易书写出特定编码的字符串了,例如"我是Jack47"采用各种编码形式的值如下:



上述的这种方式,是直接把编码后的字节写入到了数组里是一种"硬编码"[hard code]的方式。
知道了上述嘚知识后问题就来了,当前软件要支持UTF8要如何修改?
如何修改软件来支持UTF8
有两种办法可以这样划分:
1. 软转换:数据在所有地方都是鉯UTF-8的形式存储的。
2. 硬转换:程序读取的输入是UTF-8数据在程序内部转换成宽字符后进行处理,只有在最终输出的时候转换成UTF-8编码在内部一個字符是一个固定大小的内存对象。
 
          
 1. 硬编码的方法
把UTF-8相关的信息硬编码到程序中这样能够在某些场景下显著提高程序执行效率。这或许昰那些只需要支持ASCII和UTF-8编码的程序的最好办法
2. 取决于语系的方法
C语言提供了可以处理任意特定语系,采用多字节编码的字符串的处理函数依赖于这些函数的程序员可以不用感知到UTF-8编码的实际细节。通过仅仅改变语系设置就可以自动支持其他的多字节编码(例如EUC)。
 
如果使用了UTF-8或者其他类似的多字节编码需要程序员清楚地区分以下概念:

可以使用iconv函数在两个不同的编码之间进行转换,例如从GBK编码转换到UTF-8編码


0x80来表示的,在最后添加一个字节的0x00这样编码,字符串包含NUL字符而不需要增加表示字符串长度的前缀字段--这样C语言<string.h>中定义的strlen()和strcpy这些函数就可以用来操作这些数据了
          
  1. 如何处理输入的中文参数,例如中文参数的字符个数打印出来
          
 
        
}

我要回帖

更多关于 什么是转义字符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信