• 关于 字符范围 的搜索结果

回答

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.

问问小秘 2020-06-12 11:49:39 0 浏览量 回答数 0

回答

因为Java使用unicode字符集。在unicode中,每一个字符都有一个码位,与字符编码无关,而中文刚好在两个字符范围内,具体可见: http://www.unicode.org/charts/PDF/U2FF0.pdf ,两个字符最多可表示65535个字符,所以如果找一个在65535以上范围内的Unicode字符使用char就会报错了。

骑老虎放羊 2019-12-02 02:03:58 0 浏览量 回答数 0

回答

负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

问问小秘 2020-06-12 11:50:32 0 浏览量 回答数 0

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

问题

Java字符串串联错误“字符串索引超出范围:-1”

小六码奴 2019-12-01 19:59:54 6 浏览量 回答数 1

回答

详细解答可以参考官方帮助文档 名称 类型 描述 是否必需 LiveChannelConfiguration 容器 保存LiveChannel配置的容器。 子节点:Description、Status、Target 父节点:无 是 Description 字符串 LiveChannel的描述信息,最长128字节。 子节点:无 父节点:LiveChannelConfiguration 否 Status 枚举字符串 指定LiveChannel的状态。 子节点:无 父节点:LiveChannelConfiguration 有效值:enabled、disabled 默认值:enabled 否 Target 容器 保存转储配置的容器。 子节点:Type、FragDuration、FragCount、PlaylistName 父节点:LiveChannelConfiguration 是 Type 枚举字符串 指定转储的类型。 子节点:无 父节点:Target 有效值:HLS 是 FragDuration 字符串 当Type为HLS时,指定每个ts文件的时长(单位:秒),取值范围为[1, 100]的整数。 子节点:无 父节点: Target 默认值:5 否 FragCount 字符串 当Type为HLS时,指定m3u8文件中包含ts文件的个数,取值范围为[1, 100]的整数。 子节点:无 父节点:Target 默认值: 3 否 PlaylistName 字符串 当Type为HLS时,指定生成的m3u8文件的名称,必须以”.m3u8”结尾,长度范围为[6, 128]。 子节点:无 父节点:Target 默认值:playlist.m3u8 否 Snapshot 容器 保存高频截图操作Snapshot 选项的容器。 子节点:RoleName,DestBucket,NotifyTopic,Interval,PornRec 父节点:Snapshot 否 RoleName 字符串 用于高频截图操作的角色名称,要求有DestBucket的写权限和向NotifyTopic发消息的权限。 子节点:无 父节点:Snapshot 否 DestBucket 字符串 保存高频截图目标Bucket,要求与当前Bucket是同一个Owner。 子节点:无 父节点:Snapshot 否 NotifyTopic 字符串 用于通知用户高频截图操作结果的MNS的Topic。 子节点:无 父节点:Snapshot 否 Interval 数字 高频截图的间隔长度,单位为s,如果该段间隔时间内没有关键帧(I帧),那么该间隔时间不截图。 子节点:无 父节点:Snapshot 否

2019-12-01 23:13:48 0 浏览量 回答数 0

问题

linux 在字符界面中如何查看超出屏幕显示范围的内容

a123456678 2019-12-01 20:01:51 950 浏览量 回答数 1

问题

linux 在字符界面中如何查看超出屏幕显示范围的内容

我的中国 2019-12-01 19:28:49 981 浏览量 回答数 1

回答

相关知识点: escape 和 encodeURI 都属于 Percent-encoding,基本功能都是把 URI 非法字符转化成合法字符,转化后形式类似「%*」。 它们的根本区别在于,escape 在处理 0xff 之外字符的时候,是直接使用字符的 unicode 在前面加上一个「%u」,而 encode URI 则是先进行 UTF-8,再在 UTF-8 的每个字节码前加上一个「%」;在处理 0xff 以内字符时,编码方式是一样的(都是「%XX」,XX 为字符的 16 进制 unicode,同时也是字符的 UTF-8),只是范围(即哪些字符编码哪些字符不编码)不一样。 回答: encodeURI 是对整个 URI 进行转义,将 URI 中的非法字符转换为合法字符,所以对于一些在 URI 中有特殊意义的字符不会进行转义。 encodeURIComponent 是对 URI 的组成部分进行转义,所以一些特殊字符也会得到转义。 escape 和 encodeURI 的作用相同,不过它们对于 unicode 编码为 0xff 之外字符的时候会有区别,escape 是

剑曼红尘 2020-04-05 21:37:55 0 浏览量 回答数 0

问题

MaxCompute用户指南:SQL:附录:转义字符

行者武松 2019-12-01 22:03:02 1315 浏览量 回答数 0

回答

" 用 "os"+(char)57343+"china" 试下######恩,这个可以,只不过(char)57343会显示为?。达到我的目的了。######神马情况?我木有描述清楚吗?###### 代理项对的第一个值是高代理项,包含介于 U+D800 到 U+DBFF 范围内的 16 位代码值。该对的第二个值是低代理项,包含介于 U+DC00 到 U+DFFF 范围内的值。 你找到“os我china”中我的16位unicode码,输入看看###### GOOGLE 搜索hasSurrogate 我在第二页瞄到了 几个关键的字 (看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗) 字符串反转函数与超大字符集编程语言 www.建网站.com/编程语言/1-3434677.html 2009年4月7日 – public AbstractStringBuilder reverse() { boolean hasSurrogate = false; int n ... 看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗 ... JDK 1.5 对超大字符集的支持 作者: 本站会员 来源: 发布时间:2009-04-07 20:46:12 JDK 1.5 对超大字符集的支持 Unicode 与超大字符集 国标 GB18030 规定了4字节扩展部分,这部分区域目前在 Unicode 规范中作为CJK Ext B区存在,即常说的中文超大字符集。这部分区域编码为 \U20000 - \U2A6D6。 UTF-16与Java String/Character 对象 一个完整的 Unicode 字符叫 代码点/CodePoint,而一个 Java char 叫 代码单元 code unit。 String 对象以UTF-16保存 Unicode 字符,需要用2个字符表示一个 超大字符集的汉字,这这种表示方式称之为 Surrogate,第一个字符叫 Surrogate High,第二个就是 Surrogate Low。 判断一个char是否是 Surrogate 区的字符,用 Character的 isHighSurrogate()/isLowSurrogate()方法。 从两个Surrogate High/Low 字符,返回一个完整的 Unicode CodePoint 用 Character.toCodePoint()/codePointAt()方法。 一个 Code Point ,可能需要一个也可能需要两个char表示,因此不能直接使用 CharSequence.length()方法直接返回一个字符串到底有多少个汉字,而需要用String.codePointCount()/Character.codePointCount()。 要定位字符串中的第N个字符,不能直接将 N 作为偏移量,而需要从字符串头部依次遍历得到,需要用String/Character.offsetByCodePoints() 方法。 从字符串的当前字符,找到上一个字符,也不能直接用offset -- 实现,而需要用 String.codePointBefore()/Character.codePointBefore(),或用 String/Character.offsetByCodePoints() 从当前字符,找下一个字符,不能直接用 offset ++ 实现,需要判断当前 CodePoint 的长度后,再计算得到,或用 String/Character.offsetByCodePoints() 。 Swing 对 超大字符集的支持 JTextPane增加了对 超大字符集的支持,只要设置字体正确,就可以显示和编辑超大字符集。       搜索能力能体现很多问题###### 引用来自“dd”的答案 GOOGLE 搜索hasSurrogate 我在第二页瞄到了 几个关键的字 (看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗) 字符串反转函数与超大字符集编程语言 www.建网站.com/编程语言/1-3434677.html 2009年4月7日 – public AbstractStringBuilder reverse() { boolean hasSurrogate = false; int n ... 看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗 ... JDK 1.5 对超大字符集的支持 作者: 本站会员 来源: 发布时间:2009-04-07 20:46:12 JDK 1.5 对超大字符集的支持 Unicode 与超大字符集 国标 GB18030 规定了4字节扩展部分,这部分区域目前在 Unicode 规范中作为CJK Ext B区存在,即常说的中文超大字符集。这部分区域编码为 \U20000 - \U2A6D6。 UTF-16与Java String/Character 对象 一个完整的 Unicode 字符叫 代码点/CodePoint,而一个 Java char 叫 代码单元 code unit。 String 对象以UTF-16保存 Unicode 字符,需要用2个字符表示一个 超大字符集的汉字,这这种表示方式称之为 Surrogate,第一个字符叫 Surrogate High,第二个就是 Surrogate Low。 判断一个char是否是 Surrogate 区的字符,用 Character的 isHighSurrogate()/isLowSurrogate()方法。 从两个Surrogate High/Low 字符,返回一个完整的 Unicode CodePoint 用 Character.toCodePoint()/codePointAt()方法。 一个 Code Point ,可能需要一个也可能需要两个char表示,因此不能直接使用 CharSequence.length()方法直接返回一个字符串到底有多少个汉字,而需要用String.codePointCount()/Character.codePointCount()。 要定位字符串中的第N个字符,不能直接将 N 作为偏移量,而需要从字符串头部依次遍历得到,需要用String/Character.offsetByCodePoints() 方法。 从字符串的当前字符,找到上一个字符,也不能直接用offset -- 实现,而需要用 String.codePointBefore()/Character.codePointBefore(),或用 String/Character.offsetByCodePoints() 从当前字符,找下一个字符,不能直接用 offset ++ 实现,需要判断当前 CodePoint 的长度后,再计算得到,或用 String/Character.offsetByCodePoints() 。 Swing 对 超大字符集的支持 JTextPane增加了对 超大字符集的支持,只要设置字体正确,就可以显示和编辑超大字符集。       搜索能力能体现很多问题 可能是我没有表述清楚,这些内容我已经看过。现在我想达到的目的:构造一个StringBuilder,调用其reverse方法,进行调试,验证hasSurrogate为true的场景。 还是很感谢,造成误解了。哈哈。 ######中文字符不在U+D800 到 U+DBFF范围内,我使用:“os\uD801china”验证了,不过也是\uD801会显示? 谢谢啦。######Unicode 与超大字符集 国标 GB18030 规定了4字节扩展部分,这部分区域目前在 Unicode 规范中作为CJK Ext B区存在,即常说的中文超大字符集。这部分区域编码为 \U20000 - \U2A6D6。 用在这之内的试喽?"

kun坤 2020-06-05 23:23:58 0 浏览量 回答数 0

回答

你这个问题很“聪明”,似乎一语指出了Java设计的遗漏之处。想一想字符流和字节流的差别:字节流比字符流的使用范围更广,但字符流比字节流操作方便。如果有一个流已经是字符流了,也就是说,是一个用起来更方便的流,为什么要转换成字节流呢?反之,如果现在有一个字节流,但我们知道这个字节流的内容都是文本内容,那么把它转换成字符流来处理就会更方便一些,所以Java只提供了将字节流转换成字符流的转换流,没有提供将字符流转换成字节流的转换流。

星尘linger 2020-04-12 10:57:15 0 浏览量 回答数 0

回答

" 用 "os"+(char)57343+"china" 试下######恩,这个可以,只不过(char)57343会显示为?。达到我的目的了。######神马情况?我木有描述清楚吗?###### 代理项对的第一个值是高代理项,包含介于 U+D800 到 U+DBFF 范围内的 16 位代码值。该对的第二个值是低代理项,包含介于 U+DC00 到 U+DFFF 范围内的值。 你找到“os我china”中我的16位unicode码,输入看看###### GOOGLE 搜索hasSurrogate 我在第二页瞄到了 几个关键的字 (看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗) 字符串反转函数与超大字符集编程语言 www.建网站.com/编程语言/1-3434677.html 2009年4月7日 – public AbstractStringBuilder reverse() { boolean hasSurrogate = false; int n ... 看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗 ... JDK 1.5 对超大字符集的支持 作者: 本站会员 来源: 发布时间:2009-04-07 20:46:12 JDK 1.5 对超大字符集的支持 Unicode 与超大字符集 国标 GB18030 规定了4字节扩展部分,这部分区域目前在 Unicode 规范中作为CJK Ext B区存在,即常说的中文超大字符集。这部分区域编码为 \U20000 - \U2A6D6。 UTF-16与Java String/Character 对象 一个完整的 Unicode 字符叫 代码点/CodePoint,而一个 Java char 叫 代码单元 code unit。 String 对象以UTF-16保存 Unicode 字符,需要用2个字符表示一个 超大字符集的汉字,这这种表示方式称之为 Surrogate,第一个字符叫 Surrogate High,第二个就是 Surrogate Low。 判断一个char是否是 Surrogate 区的字符,用 Character的 isHighSurrogate()/isLowSurrogate()方法。 从两个Surrogate High/Low 字符,返回一个完整的 Unicode CodePoint 用 Character.toCodePoint()/codePointAt()方法。 一个 Code Point ,可能需要一个也可能需要两个char表示,因此不能直接使用 CharSequence.length()方法直接返回一个字符串到底有多少个汉字,而需要用String.codePointCount()/Character.codePointCount()。 要定位字符串中的第N个字符,不能直接将 N 作为偏移量,而需要从字符串头部依次遍历得到,需要用String/Character.offsetByCodePoints() 方法。 从字符串的当前字符,找到上一个字符,也不能直接用offset -- 实现,而需要用 String.codePointBefore()/Character.codePointBefore(),或用 String/Character.offsetByCodePoints() 从当前字符,找下一个字符,不能直接用 offset ++ 实现,需要判断当前 CodePoint 的长度后,再计算得到,或用 String/Character.offsetByCodePoints() 。 Swing 对 超大字符集的支持 JTextPane增加了对 超大字符集的支持,只要设置字体正确,就可以显示和编辑超大字符集。       搜索能力能体现很多问题###### 引用来自“dd”的答案 GOOGLE 搜索hasSurrogate 我在第二页瞄到了 几个关键的字 (看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗) 字符串反转函数与超大字符集编程语言 www.建网站.com/编程语言/1-3434677.html 2009年4月7日 – public AbstractStringBuilder reverse() { boolean hasSurrogate = false; int n ... 看源码时hasSurrogate这个玩意不是很清楚查了下资料豁然开朗 ... JDK 1.5 对超大字符集的支持 作者: 本站会员 来源: 发布时间:2009-04-07 20:46:12 JDK 1.5 对超大字符集的支持 Unicode 与超大字符集 国标 GB18030 规定了4字节扩展部分,这部分区域目前在 Unicode 规范中作为CJK Ext B区存在,即常说的中文超大字符集。这部分区域编码为 \U20000 - \U2A6D6。 UTF-16与Java String/Character 对象 一个完整的 Unicode 字符叫 代码点/CodePoint,而一个 Java char 叫 代码单元 code unit。 String 对象以UTF-16保存 Unicode 字符,需要用2个字符表示一个 超大字符集的汉字,这这种表示方式称之为 Surrogate,第一个字符叫 Surrogate High,第二个就是 Surrogate Low。 判断一个char是否是 Surrogate 区的字符,用 Character的 isHighSurrogate()/isLowSurrogate()方法。 从两个Surrogate High/Low 字符,返回一个完整的 Unicode CodePoint 用 Character.toCodePoint()/codePointAt()方法。 一个 Code Point ,可能需要一个也可能需要两个char表示,因此不能直接使用 CharSequence.length()方法直接返回一个字符串到底有多少个汉字,而需要用String.codePointCount()/Character.codePointCount()。 要定位字符串中的第N个字符,不能直接将 N 作为偏移量,而需要从字符串头部依次遍历得到,需要用String/Character.offsetByCodePoints() 方法。 从字符串的当前字符,找到上一个字符,也不能直接用offset -- 实现,而需要用 String.codePointBefore()/Character.codePointBefore(),或用 String/Character.offsetByCodePoints() 从当前字符,找下一个字符,不能直接用 offset ++ 实现,需要判断当前 CodePoint 的长度后,再计算得到,或用 String/Character.offsetByCodePoints() 。 Swing 对 超大字符集的支持 JTextPane增加了对 超大字符集的支持,只要设置字体正确,就可以显示和编辑超大字符集。       搜索能力能体现很多问题 可能是我没有表述清楚,这些内容我已经看过。现在我想达到的目的:构造一个StringBuilder,调用其reverse方法,进行调试,验证hasSurrogate为true的场景。 还是很感谢,造成误解了。哈哈。 ######中文字符不在U+D800 到 U+DBFF范围内,我使用:“os\uD801china”验证了,不过也是\uD801会显示? 谢谢啦。######Unicode 与超大字符集 国标 GB18030 规定了4字节扩展部分,这部分区域目前在 Unicode 规范中作为CJK Ext B区存在,即常说的中文超大字符集。这部分区域编码为 \U20000 - \U2A6D6。 用在这之内的试喽?" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/a7c31c35be4f4057b77de16c8efe4fb5.png)

montos 2020-05-29 22:30:06 0 浏览量 回答数 0

问题

java用户输入一个[0, 511]范围内的数字,计算其对应的二进制数字,并用字符H(代表0)

知与谁同 2019-12-01 20:18:36 453 浏览量 回答数 1

回答

Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。语法index()方法语法:str.index(str, beg=0, end=len(string))参数str -- 指定检索的字符串beg -- 开始索引,默认为0。end -- 结束索引,默认为字符串的长度。返回值如果包含子字符串返回开始的索引值,否则抛出异常。实例以下实例展示了index()方法的实例:实例(Python 2.0+)!/usr/bin/pythonstr1 = "this is string example....wow!!!";str2 = "exam";print str1.index(str2);print str1.index(str2, 10);print str1.index(str2, 40);以上实例输出结果如下:1515Traceback (most recent call last): File "test.py", line 8, in print str1.index(str2, 40);ValueError: substring not foundshell returned 1

世事皆空 2019-12-02 01:06:54 0 浏览量 回答数 0

回答

百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法”。         什么是“可打印字符”呢?为什么要用它来传输8Bit字节码呢?在回答这两个问题之前我们有必要来思考一下什么情况下需要使用到Base64?Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。         Base64,就是使用64个可打印字符来表示二进制数据的方法。Base64的索引与对应字符的关系如下表所示: 也就是说,如果将索引转换为对应的二进制数据的话需要至多6个Bit。然而ASCII码需要8个Bit来表示,那么怎么使用6个Bit来表示8个Bit的数据呢?6个Bit当然不能存储8个Bit的数据,但是46个Bit可以存储38个Bit的数据啊!如下表所示: 可以看到“Son”通过Base64编码转换成了“U29u”。这是刚刚好的情况,3个ASCII字符刚好转换成对应的4个Base64字符。但是,当需要转换的字符数不是3的倍数的情况下该怎么办呢?Base64规定,当需要转换的字符不是3的倍数时,一律采用补0的方式凑足3的倍数,具体如下表所示: 每6个Bit为一组,第一组转换后为字符“U”,第二组末尾补4个0转换后为字符“w”。剩下的使用“=”替代。即字符“S”通过Base64编码后为“Uw==”。这就是Base64的编码过程。

问问小秘 2020-04-30 16:51:05 0 浏览量 回答数 0

回答

MYSQL没有内置生成中文字符的函数,理论上可以变通的执行。随机字符实现方式:select substring(MD5(RAND()),1,6);查询好汉字编码范围从中获取一个字符即可,使用到到函数:SELECT HEX('国') ;SELECT UNHEX('E59BBD');

1315067356609456 2019-12-02 01:55:21 0 浏览量 回答数 0

回答

Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。str.index(str, beg=0, end=len(string))

ylrf1212 2019-12-02 01:08:23 0 浏览量 回答数 0

回答

如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文章的介绍。 random.random()用于生成 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数 ? 1 n: a <= n <= b。如果 a ? 123456 print random.uniform(10, 20) print random.uniform(20, 10) ---- 18.7356606526 12.5798298022 random.randint 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数 ? 123 print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 print random.randint(20, 10) #该语句是错误的。 下限必须小于上限。 random.randrange 从指定范围内,按指定基数递增的集合中 ,这篇文章就是对python生成随机数的应用程序的部分介绍。 随机整数: import randomrandom.randint(0,99) 21 随机选取0到100间的偶数: import randomrandom.randrange(0, 101, 2) 42 随机浮点数: import randomrandom.random() 0.85415370477785668 random.uniform(1, 10) 5.4221167969800881 随机字符: import randomrandom.choice('abcdefg%^*f') 'd' 多个字符中选取特定数量的字符: import random random.sample('abcdefghij',3) ['a', 'd', 'b'] 多个字符中选取特定数量的字符组成新字符串: import randomimport stringstring.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r eplace(" ","") 'fih' 随机选取字符串: import randomrandom.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] ) 'lemon' 洗牌: import randomitems = [1, 2, 3, 4, 5, 6]random.shuffle(items)items [3, 2, 5, 6, 4, 1]

xuning715 2019-12-02 01:10:02 0 浏览量 回答数 0

回答

使用Unicode值来表示字符型常量,格式是'\uXXXX',其中XXXX代表一个十六进制的整数。范围是'\u0000'~'\uFFFF',一共可以表示65535个字符,其中前256个('\u0000'~'\u00FF')字符和ASCII码中的字符完全重合。

星尘linger 2020-04-07 11:39:51 0 浏览量 回答数 0

回答

Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。

游客aasf2nc2ujisi 2019-12-02 03:22:22 0 浏览量 回答数 0

回答

字符串的操作 字符串的连接操作 符号: +格式:str1 + str2例如:str1 = 'I Love' str2 = 'You!' print(str1 + str2) >>> 'I Love You!' 返回值:str字符串的复制操作 符号: *格式:str * num例如:str = 'abc' num = 3 print(str1 * num) >>> 'abcabcabc' 返回值:str字符串的索引操作 符号: []格式:str[index]例如:str = 'abcde' print(str[2]) >>> 'c' 返回值:str字符串的切片操作 符号: [::]格式:str[index:index:step]例如:str = 'abcdefg' print(str[:]) >>> 'abcdefg' #取字符串所有内容,开头的0可以忽略 print(str[:3]) >>> 'abc' #取出字符串索引0-3的内容(顾头不顾尾,不包含索引3的对象) print(str[:5:2]) >>> 'ace' #取出字符串索引0-5的内容,每2个索引取一次 print(str[3:]) >>> 'defg' #取出字符串索引3开始到结尾的内容 print(str[-2:]) >>> 'fg' #取出字符串倒数第2开始到结尾的内容 返回值:str 内置方法 连接 格式:x.__add__(y)等同于x+y返回值:str 包含 格式:x.__contains__(y)返回值:bool相等 格式:x.__eq__(y)等同于x==y返回值:bool大于等于 格式:x.__ge__(y)等同于x>=y返回值:bool访问属性方法(文件操作时用) 格式:x.__getattribute__(self,name)返回值:tuple获取键值对(字典操作时用) 格式:x.__getitem__(key)返回值:键的值 大于 格式:x.__gt__(y)等同于x>y返回值:bool哈希值 格式:x.__hash__()返回值:哈希值,int类型迭代器 格式:x.__iter__()返回值:迭代器小于等于 格式:x.__le__(y)等同于x<=y返回值:bool长度 格式:x.__len__()等同于len(x)返回值:int类型小于 格式:x.__lt__()返回值:布尔类型复制 格式:x.__mul__(y)等同于x*y返回值:str注::此处的y必须是int类型 不等于 格式:x.__ne__(y)等同于x!=y返回值:bool右->左 复制 格式:x.__rmul__(y)等同于y*x返回值:str注:此处的y必须是int类型 常用方法 首字母大写,后面的小写 格式:x.capitalize() #开头第一个单词首字母大写,后面的所有字符串全部小写 例如:x = = 'i am A 好 boy' print(x.capitalize()) >>> 'I am a 好 boy' 返回值:str全部字符小写 格式:x.casefold() #字符串中所有单词的所有字母全部小写 例如:x = = 'i am A 好 boy' print(x.casefold()) >>> 'i am a 好 boy' 返回值:str居中,两边默认以空格填充 格式:x.center() #定义字符串的长度,不足长度时,两边以指定字符串进行填充 例如:x = 'abc' print(x.center(20,'*')) >>> '********abc*********' 返回值:str计数(默认全文计数) 格式:x.count(str,index1,index2) #指定开始和结束范围来统计某字符串的个数 例如:x = 'sffefwsf' print(x.count('sf'),0,8) >>> 2 返回值:int类型编码 格式:x.encode() #指定字符串的编码格式 例如:x.encode(encoding='utf-8')#转换为utf-8格式返回值:bytes以什么为结尾 格式:x.endswith(str,index1,index2) #指定字符串的开始和结束范围,判断所选区域是否是以指定字符串结尾 例如:x = 'adfd' print(x.endswith('fd',2,3)) >>> True 返回值:bool把t转换为空格 格式:x.expandtabs() #默认开头到\t为8个字节,不足以空格填充 例如:x = 'i amt At 好 boy' print(x.expandtabs()) >>> 'i am A 好 boy' 返回值:str查找 格式:x.find(str,index1,index2) #指定开始和结束的范围,查找指定区域内是否由指定的字符串(只返回查找到第一个的索引值) 例如:x = 'asdfdsfsafsaf' print(x.find('df',1,8)) >>> 2 返回值:int类型注:如果find未查找到,将返回为-1 格式化 格式:x.format(*args) #字符串的格式化可以有参数,可以无参数,可以是索引值参数,也可以是关键字参数 无参数 例如:s1 = 'I {} {} {}' print(s1.format('love','you','!')) >>> 'I love you !' 索引参数 例如:s1 = 'I {0} {1} {0} {1}' print(s1.format('love','you')) >>> 'I love you love you' 注:使用索引参数时,只能按顺序,从索引0开始 关键字参数 例如:s1 = 'I {m} {n}' print(s1.format(m = 'love',n = 'you')) >>> 'I love you' 格式限定符 填充常和对齐一起使用: ^ < > 分别是居中,左对齐和右对齐,后面带宽度 : 后面带填充的字符,只能是一个字符,默认是空格 例如: 无(位置)参数:s1 = 'I love you {}' print(s1.format(', very much !')) 'I love you , very much !' 默认居中方法:s1 = 'I love you {:^18}' print(s1.format(', very much !')) 'I love you , very much ! ' 指定字符居中:s1 = 'I love you {:*^18}' print(s1.format(', very much !')) 'I love you , very much !*' 指定字符左对齐:s1 = 'I love you {:*<18}' print(s1.format(', very much !')) 'I love you , very much !*' 指定字符右对齐:s1 = 'I love you {:*>18}' print(s1.format(', very much !')) 'I love you *, very much !' 精度与类型f 例如:s1 = '圆周率大概是{}' print(s1.format(3.1415926)) >>> '圆周率大概是3.1415926' s1 = '圆周率大概是{:.2f}'print(s1.format(3.1415926)) >>> '圆周率大概是3.14' s1 = '圆周率大概是{:.2f}'print(s1.format(3.1415926)) >>> '圆周率大概是3.1416' 注:精度一般和浮点一起使用,取值时使用四舍五入法 进制操作 主要的进制为b、d、o、x,分别是二、十、八、十六进制 例如: 十进制:s1 = 'The pen values {} yuan!'s1 = 'The pen values {:d} yuan!'print(s1.format(17)) >>> 'The pen values 17 yuan!' 二进制:s1 = 'The pen values {:b} yuan!'print(s1.format(17)) >>> 'The pen values 10001 yuan!' 八进制:s1 = 'The pen values {:o} yuan!'print(s1.format(17)) >>> 'The pen values 21 yuan!' 十六进:s1 = 'The pen values {:x} yuan!'print(s1.format(17)) >>> 'The pen values 11 yuan!' 金融字符,千分位 即, 例如:s1 = 'The phone is {}$ !' print(s1.format(10000000)) >>> 'The phone is 10000000$ !' s1 = 'The phone is {:,}$ !'print(s1.format(10000000)) >>> 'The phone is 10,000,000$ !' 返回值:str 查找 格式:x.index(str,index1,index2) #用法和find一样 返回值:int注::当index未查找到,程序将报错 非符号字符串 格式:x.isalnum() #字符串中可以有大小写,可以有数字,但不可以有符号 返回值:bool纯字母的字符串 格式:x.isalpha() #字符串中可以有大小写,但不可以有数字和符号 返回值:bool纯数字的字符串 格式:x.isdecimal() #字符串中只可以数字 返回值:bool纯数字的字符串 格式:x.isdigit() #字符串中只可以数字 返回值:bool开头字母的字符串 格式:x.isidentifier() #字符串以字母开头,可以是大小写,后面可以有数字,但数字不能开头 返回值:bool全部小写 格式:x.islower() #字符串全部是小写,也可以有数字,数字可以开头,但不能全数字 返回值:bool包含中文数字 格式:x.isnumeric() #字符串中可以有数字,也可以有中文大小写数字 返回值:bool可打印 格式:x.isprintable() #打印为空,则为假 返回值:bool空格 格式:x.isspace() #字符串中只能是空格 返回值:bool标题 格式:x.istitle() #字符串中每个单词首字母大写 返回值:bool全部大写 格式:x.isupper() #字符串中可以有数字,数字可以开头,但必须有大写字母 返回值:bool拼接 格式:x.join(str) #把字符串以指定字符串进行相连 例如:x = 'abcde' print('_'.join(x)) >>> 'a_b_c_d_e' 返回值:str左对齐 格式:x.ljust(str) #字符串左对齐,需要指定长度,不足长度时可以用指定字符串进行填充(默认以空格填充),当指定长度小于字符串长度,将会左对齐 例如:x = 'abcde' print(x.ljust(12,'*')) >>> 'abcde*******' 返回值:str全部小写 格式:x.lower() #字符串中所有单词,所有字母全部小写 #与casefold()功能一样 返回值:str去除左边空格 格式:x.lstrip() #去除对字符串左边的指定字符串,字符串中间和结尾的指定字符串不做处理,默认去除的是空格 例如:x = 'aaafdfdfaaadfdsaaa' print(x.lstrip('a')) >>> 'fdfdfaaadfdsaaa' 返回值:str字符串进行分段 格式:x.partition(str) #把字符串以从左到右第一个指定字符串为元素进行分段,以元组形式展现 例如:x = 'acbadfsadfsdfsd' print(x.partition('sa')) >>> ('acbadf', 'sa', 'dfsdfsd') 返回值:tuple字符串替换 格式:x.replace(old,new,count) #把字符串中指定的字符串替换为新字符串,默认全部替换,也可以指定替换次数,如果次数超过存在的个数,将全部替换 例如:x = 'acbadfsadfsdfsd' print(x.replace('df','A',7)) >>> 'acbaAsaAsAsd' 返回值:str右→左 查找 格式:x.rfind(str,index1,index2) #功能同find()一样 返回值:int右→左 查找 格式:x.rindex(str,index1,index2) #功能同index()一样 返回值:int右对齐 格式:x.rjust(str) #字符串右对齐,需要指定长度,不足长度时可以用指定字符串进行填充(默认以空格填充),当指定长度小于字符串长度,将会右对齐 例如:x = 'adc' print(x.rjust(6,'%')) >>> '%%%adc' 返回值:str右→左 字符串分段 格式:x.rpartition(str) #把字符串以从右到左第一个指定字符串进行分段,以元组形式展示 例如:x = 'abccbacbd' print(x.rpartition('cb')) >>> ('abccba', 'cb', 'd') 返回值:tuple字符串切片 格式:x.rsplit(str) #把字符串以指定字符串进行切片,并以列表的形式展现 例如:x = 'abccbacbd' print(x.rsplit('cb')) >>> ['abc', 'a', 'd'] 返回值:list去除右边空格 格式:x.rstrip(str) #去除字符串最右边的指定字符串,左边和中间的指定字符串不做处理,默认去除的是空格 例如:x = 'aaafdfdfaaadfdsaaa' print(x.rstrip('a')) >>> 'aaafdfdfaaadfds' 返回值:str切片 格式:x.split() #把字符串以指定字符串进行切片,并以列表的形式展现 #功能同rsplit()一样 返回值:list换行符分段 格式:x.splitlines() #把字符串以换行符进行切片,并以列表的形式展现 返回值:list以什么为开头 格式:x.startswith(str,index1,index2) #指定字符串的开始和结束范围,判断指定区域是否是以指定字符串开头 例如:x = 'adafsdaf' print(x.startswith('da',1,8)) >>> True 返回值:bool去除两边空格 格式:x.strip(str) #去除字符串两边的指定字符串,中间的指定字符串不做处理,默认去除的是空格 例如:x = 'aaadfsaaafdsfaaa' print(x.strip()) >>> 'dfsaaafdsf' 返回值:str大小写互转 格式:x.swapcase() #字符串中所有的字母进行大小写相互转换 例如:x = 'aBcdE' print(x.swapcase()) >>> 'AbCDe' 返回值:str标题化 格式:x.title() #对字符串中所有单词首字母大写,单词中间的大写全部转换为小写 例如:x = 'asd faDSdsf sdf' print(x.title()) >>> 'Asd Fadsdsf Sdf' 返回值:str全部变大写 格式:x.upper() #字符串中所有字母全部转换为大写 例如:x = 'DFdgDdfdg' print(x.upper()) >>> 'DFDGDDFDG' 返回值:str左对齐,零填充 格式:x.zfill() #字符串左对齐,指定字符串长度,不足部分以0填充 例如:x = 'afd' print(x.zfill(5)) >>> '00afd' 返回值:str映射函数 x.maketrans(*args) #把两个字符串进行一一对应,两个字符串长度必须一致 格式:str.maketrans(str1,str2) bytearray.maketrans(str1,str2) bytes.maketrans(str1,str2) 返回值:dict映射函数 x.translate(*args) #把maketrans()得到的映射表应用出来 格式:x.translate(str.maketrans(str1,str2))返回值:str

xuning715 2019-12-02 01:10:18 0 浏览量 回答数 0

问题

云数据库OceanBase的时间日期类型

云栖大讲堂 2019-12-01 21:28:35 1513 浏览量 回答数 0

问题

云数据库OceanBase的字符串类型

云栖大讲堂 2019-12-01 21:28:35 1407 浏览量 回答数 0

问题

MaxCompute用户指南:SQL:附录:正则表达式规范

行者武松 2019-12-01 22:03:04 1212 浏览量 回答数 0

回答

char是固定长度,处理速度比vachar快,费内存空间,当存储的值没有达到指定的范围时,会用空格替代。 vachar是不固定长度,节约存储空间,存储的是真实的值。 如:存储字符串’abc’ 使用char(10),表示存储的字符将占10个字节(包括7个空字符) 使用varchar(10),则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。

茶什i 2019-12-02 03:14:35 0 浏览量 回答数 0

回答

强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。 grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。 命令格式: grep [option] pattern file|dir 1 常用参数: -A n --after-context显示匹配字符后n行 -B n --before-context显示匹配字符前n行 -C n --context 显示匹配字符前后n行 -c --count 计算符合样式的列数 -i 忽略大小写 -l 只列出文件内容符合指定的样式的文件名称 -f 从文件中读取关键词 -n 显示匹配内容的所在文件中行数 -R 递归查找文件夹 1 2 3 4 5 6 7 8 9 grep 的规则表达式: ^ #锚定行的开始 如:'^grep'匹配所有以grep开头的行。 $ #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 . #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 * #匹配零个或多个先前字符 如:'grep'匹配所有一个或多个空格后紧跟grep的行。 . #一起用代表任意字符。 [] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 [^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 (..) #标记匹配字符,如'(love)',love被标记为1。 < #锚定单词的开始,如:'<grep'匹配包含以grep开头的单词的行。 > #锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。 x{m} #重复字符x,m次,如:'0{5}'匹配包含5个o的行。 x{m,} #重复字符x,至少m次,如:'o{5,}'匹配至少有5个o的行。 x{m,n} #重复字符x,至少m次,不多于n次,如:'o{5,10}'匹配5--10个o的行。 \w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 \W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b #单词锁定符,如: '\bgrep\b'只匹配grep。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 实例: (1)查找指定进程 ps -ef | grep svn 1 (2)查找指定进程个数 ps -ef | grep svn -c 1 (3)从文件中读取关键词 cat test1.txt | grep -f key.log 1 (4)从文件夹中递归查找以grep开头的行,并只列出文件 grep -lR '^grep' /tmp 1 (5)查找非x开关的行内容 grep '^[^x]' test.txt 1 (6)显示包含 ed 或者 at 字符的内容行 grep -E 'ed|at' test.txt

黄二刀 2020-03-12 18:13:37 0 浏览量 回答数 0

回答

确实跟缓冲区有关, getch每次调用,从标准输入缓冲区中读入1个字符,但如果缓冲区中没有数据,则会阻塞程序,等待直到缓冲区里有数据。 那么什么时候有数据呢? -- 当你按回车的时候,之前键入的所有字符,包含回车自身,一并被送入输入缓冲区 所以,当缓冲区为空时,无论你输入多少个字符,只要不按回车,getch()函数会一直等在那里。 第一个程序,输入asxsas回车后,getch()获取到第一个字符a,之后的字符还在缓冲区内,当程序退出时,缓冲区销毁,里面的数据也随之消失。 第二个程序可以自己体会下。 第三个程序,翻译一下 每当( (从缓冲区读一个字符) 不等于 '#' ) 执行 { 啥也不干,继续循环 }只有当读到#的时候,才因不满足循环条件而跳出,继续执行下面的putchar,当然 此时打印出的就是 # getchar返回int类型这个是API里定义的规范,但是你可以将它赋值给一个char类型的变量,这里会自动做int -> char的隐式类型转换,这个转换,会丢失高位字节,但是对于getch()返回的数据来说,他的范围是0-127,高位字节永远都是0,丢了也无所谓

a123456678 2019-12-02 02:39:10 0 浏览量 回答数 0

问题

【精品问答】Python3 实例80问(附源码解析)

珍宝珠 2020-02-17 13:11:47 442 浏览量 回答数 2

回答

支持;maxcompute(原ODPS)正则表达式规范,请参考:https://help.aliyun.com/document_detail/27871.htmlodps数据都是以utf8编码保存,对于中文字符可以用对应的16进制编码表示,格式是x{1234}中文字符编码的范围是[x{4e00}-x{9fa5}],例如select regexp_extract("阿里巴巴", "([\x{4e00}-\x{9fa5}]+)", 1) from dual; 可以匹配上中文字符串“阿里巴巴”

琴瑟 2019-12-02 00:00:23 0 浏览量 回答数 0

回答

不依赖微软的库和WindowsAPI,没能试验成功!######问题已解决,谢谢。######看这篇文章,讲的很清楚(:)这是从其他地方拷贝过来的) UNICODE环境设置 在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下。 UNICODE编译设置: C/C++, Preprocessor difinitions 去除_MBCS,加_UNICODE,UNICODE 在ProjectSetting/link/output 中设置Entry为wWinMainCRTStartup 反之为MBCS(ANSI)编译。 Unicode :宽字节字符集 1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数? 可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。 调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。 size_t strlen( const char *string ); size_t wcslen( const wchar_t *string ); size_t _mbslen( const unsigned char *string ); size_t _mbstrlen( const char *string ); 2. 如何对DBCS(双字节字符集)字符串进行操作? 函数 描述 PTSTR CharNext ( LPCTSTR ); 返回字符串中下一个字符的地址 PTSTR CharPrev ( LPCTSTR, LPCTSTR ); 返回字符串中上一个字符的地址 BOOL IsDBCSLeadByte( BYTE ); 如果该字节是DBCS字符的第一个字节,则返回非0值 3. 为什幺要使用Unicode? (1) 可以很容易地在不同语言之间进行数据交换。 (2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。 (3) 提高应用程序的运行效率。 Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那幺系统首先要将字符串转换成Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序更加有效地运行。 Windows CE 本身就是使用Unicode的一种操作系统,完全不支持ANSI Windows函数 Windows 98 只支持ANSI,只能为ANSI开发应用程序。 Microsoft公司将COM从16位Windows转换成Win32时,公司决定需要字符串的所有COM接口方法都只能接受Unicode字符串。 4. 如何编写Unicode源代码?   Microsoft公司为Unicode设计了WindowsAPI,这样,可以尽量减少代码的影响。实际上,可以编写单个源代码文件,以便使用或者不使用Unicode来对它进行编译。只需要定义两个宏(UNICODE和_UNICODE),就可以修改然后重新编译该源文件。   _UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。     5. Windows定义的Unicode数据类型有哪些?   数据类型 说明   WCHAR Unicode字符   PWSTR 指向Unicode字符串的指针   PCWSTR 指向一个恒定的Unicode字符串的指针   对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。   ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。     6. 如何对Unicode进行操作?   字符集 特性 实例   ANSI 操作函数以str开头 strcpy   Unicode 操作函数以wcs开头 wcscpy   MBCS 操作函数以_mbs开头 _mbscpy   ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)   ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)   所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数结尾以A表示;Unicode版本函数结尾以W表示。Windows会如下定义:   #ifdef UNICODE   #define CreateWindowEx CreateWindowExW   #else   #define CreateWindowEx CreateWindowExA   #endif // !UNICODE     7. 如何表示Unicode字符串常量?   字符集 实例   ANSI “string”   Unicode L“string”   ANSI/Unicode T(“string”)或_TEXT(“string”)   if( szError[0] == _TEXT(‘J’) ){ }     8. 为什幺应当尽量使用操作系统函数?   这将有助于稍稍提高应用程序的运行性能,因为操作系统字符串函数常常被大型应用程序比如操作系统的外壳进程Explorer.exe所使用。由于这些函数使用得很多,因此,在应用程序运行时,它们可能已经被装入RAM。   如:StrCat,StrChr,StrCmp和StrCpy等。     9. 如何编写符合ANSI和Unicode的应用程序?   (1) 将文本串视为字符数组,而不是chars数组或字节数组。   (2) 将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串。   (3) 将显式数据类型(如BYTE和PBYTE)用于字节、字节指针和数据缓存。   (4) 将TEXT宏用于原义字符和字符串。   (5) 执行全局性替换(例如用PTSTR替换PSTR)。   (6) 修改字符串运算问题。例如函数通常希望在字符中传递一个缓存的大小,而不是字节。这意味着不应该传递sizeof(szBuffer),而应该传递(sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那幺请记住要按字节来分配内存。这就是说,应该调用   malloc(nCharacters *sizeof(TCHAR)),而不是调用malloc(nCharacters)。     10. 如何对字符串进行有选择的比较?   通过调用CompareString来实现。   int CompareString(    LCID Locale, // locale identifier DWORD dwCmpFlags, // comparison-style options LPCTSTR lpString1, // pointer to first string int cchCount1, // size, in bytes or characters, of first string LPCTSTR lpString2, // pointer to second string int cchCount2 // size, in bytes or characters, of second string   ); Locale 本地比较的定义    LOCALE_USER_DEFAULT    LOCALE_SYSTEM_DEFAULT     标志 含义   NORM_IGNORECASE 忽略字母的大小写   NORM_IGNOREKANATYPE 不区分平假名与片假名字符   NORM_IGNORENONSPACE 忽略无间隔字符   NORM_IGNORESYMBOLS 忽略符号   NORM_IGNOREWIDTH 不区分单字节字符与作为双字节字符的同一个字符   SORT_STRINGSORT 将标点符号作为普通符号来处理     11. 如何判断一个文本文件是ANSI还是Unicode?   判断如果文本文件的开头两个字节是0xFF和0xFE,那幺就是Unicode,否则是ANSI。     12. 如何判断一段字符串是ANSI还是Unicode?   用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此 IsTextUnicode有可能返回不正确的结果。     13. 如何在Unicode与ANSI之间转换字符串?   Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。     14. Unicode和DBCS之间的区别    Unicode使用(特别在C程序设计语言环境里)“宽字符集”。「Unicode中的每个字符都是16位宽而不是8位宽。」在Unicode中,没有单单使用8位数值的意义存在。相比之下,在“双位组字符集”中我们仍然处理8位数值。有些位组自身定义字符,而某些位组则显示需要和另一个位组共同定义一个字符。     处理DBCS字符串非常杂乱,但是处理Unicode文字则像处理有秩序的文字。您也许会高兴地知道前128个Unicode字符(16位代码从0x0000到0x007F)就是ASCII字符,而接下来的128个Unicode字符(代码从0x0080到0x00FF)是ISO 8859-1对ASCII的扩展。Unicode中不同部分的字符都同样基于现有的标准。这是为了便于转换。希腊字母表使用从0x0370到0x03FF的代码,斯拉夫语使用从0x0400到0x04FF的代码,美国使用从0x0530到0x058F的代码,希伯来语使用从0x0590到0x05FF的代码。中国、日本和韩国的象形文字(总称为CJK)占用了从0x3000到0x9FFF的代码。Unicode的最大好处是这里只有一个字符集,没有一点含糊。         15.衍生标准     Unicode是一个标准。UTF-8是其概念上的子集,UTF-8是具体的编码标准。而UNICODE是所有想达到世界统一编码标准的标准。UTF-8标准就是Unicode(ISO10646)标准的一种变形方式,      UTF的全称是:Unicode/UCS Transformation Format,其实有两种UTF,一种是UTF-8,一种是UTF-16,      不过UTF-16使用较少,其对应关系如下:      在Unicode中编码为 0000 - 007F 的 UTF-8 中编码形式为: 0xxxxxxx      在Unicode中编码为 0080 - 07FF 的 UTF-8 中编码形式为: 110xxxxx 10xxxxxx      在Unicode中编码为 0000 - 007F 的 UTF-8 中编码形式为: 1110xxxx 10xxxxxx 10xxxxxx           utf-8是unicode的一个新的编码标准,其实unicode有过好几个标准.我们知道一直以来使用的unicode字符内码都是16位,它实际上还不能把全世界的所有字符编在一个平面系统,比如中国的藏文等小语种,所以utf-8扩展到了32位,也就是说理论在utf-8中可容纳二的三十二次方个字符. UNICODE的思想就是想把所有的字符统一编码,实现一个统一的标准.big5、gb都是独立的字符集,这也叫做远东字符集,把它拿到德文版的WINDOWS上可能将会引起字符编码的冲突....早期的WINDOWS默认的字符集是ANSI.notepad中输入的汉字是本地编码,但在NT/2000内部是可以直接支持UNICODE的。notepad.exe在WIN95和98中都是ANSI字符,在NT中则是UNICODE.ANSI和UNICODE可以方便的实现对应映射,也就是转换 ASCII是8位范围内的字符集,对于范围之外的字符如汉字它是无法表达的。unicode是16位范围内的字符集,对于不同地区的字符分区分配,unicode是多个IT巨头共同制定的字符编码标准。如果在unicode环境下比如WINDOWS NT上,一个字符占两字节16位,而在ANSI环境下如WINDOWS98下一个字符占一个字节8位.Unicode字符是16位宽,最多允许65,535字符,数据类型被称为WCHAR。       对于已有的ANSI字符,unicode简单的将其扩展为16位:比如ANSI"A"=0x43,则对应的UNICODE为       "A"= 0x0043        而ASCII用七存放128个字符,ASCII是一个真正的美国标准,所以它不能满足其他国家的需要,例如斯拉夫语的字母和汉字于是出现了Windows ANSI字符集,是一种扩展的ASCII码,用8位存放字符,低128位仍然存放原来的ASCII码,        而高128位加入了希腊字母等        if def UNICODE        TCHAR = wchar        else        TCHAR = char        你需要在Project\Settings\C/C++\Preprocesser definitions中添加UNICODE和_UNICODE        UINCODE,_UNICODE都要定义。不定义_UNICODE的话,用SetText(HWND,LPCTSTR),将被解释为SetTextA(HWND,LPTSTR),这时API将把你给的Unicode字符串看作ANSI字符串,显示乱码。因为windows API是已经编译好存在于dll中的,由于不管UNICODE还是ANSI字符串,都被看作一段buffer,如"0B A3 00 35 24 3C 00 00"如果按ANSI读,因为ANSI字串是以'\0'结束的,所以只能读到两字节"0B A3 \0",如果按UNICODE读,将完整的读到'\0\0'结束。         由于UNICODE没有额外的指示位,所以系统必须知道你提供的字串是哪种格式。此外,UNICODE好象是ANSI C++规定的,_UNICODE是windows SDK提供的。如果不编写windows程序,可以只定义UNICODE。 开发过程:         围绕着文件读写、字符串处理展开。文件主要有两种:.txt和.ini文件        在unicode和非unicode环境下字符串做不同处理的,那么需要参考以上9,10两条,以适应不同环境得字符串处理要求。         对文件读写也一样。只要调用相关接口函数时,参数中的字符串前都加上_TEXT等相关宏。如果写成的那个文件需要是unicode格式保存的,那么在创建文件时需要加入一个字节头。          CFile file;           WCHAR szwBuffer[128];           WCHAR *pszUnicode = L"Unicode string\n"; // unicode string           CHAR pszAnsi = "Ansi string\n"; // ansi string           WORD wSignature = 0xFEFF;           file.Open(TEXT("Test.txt"), CFile::modeCreate|CFile::modeWrite);           file.Write(&wSignature, 2);           file.Write(pszUnicode, lstrlenW(pszUnicode) * sizeof(WCHAR));           // explicitly use lstrlenW function           MultiByteToWideChar(CP_ACP, 0, pszAnsi, -1, szwBuffer, 128);           file.Write(szwBuffer, lstrlenW(szwBuffer) * sizeof(WCHAR));            file.Close();            //以上这段代码在unicode和非unicode环境下都有效。这里显式的指明用Unicode来进行操作。           在非unicode环境下,缺省调用的都是ANSI格式的字符串,此时TCHAR转换为CHAR类型的,除非显式定义WCHAR。所以在这个环境下,如果读取unicode文件,那么首先需要移动2个字节,然后读取得字符串需要用MultiByteToWideChar来转换,转换后字符串信息才代表unicode数据。          在unicode环境下,缺省调用得都是unicode格式得字符串,也就是宽字符,此时TCHAR转换为WCHAR,相关得API函数也都调用宽字符类型的函数。此时读取unicode文件也和上面一样,但是读取得数据是WCHAR的,如果要转换成ANSI格式,需要调用WideCharToMultiByte。如果读取ANSI的,则不用移动两个字节,直接读取然后视需要转换即可。                    某些语言(如韩语)必须在unicode环境下才能显示,这种情况下,在非unicode环境下开发,就算用字符串函数转换也不能达到显示文字的目的,因为此时调用得API函数是用ANSI的(虽然底层都是用UNICODE处理但是处理结果是按照程序员调用的API来显示的)。所以必须用unicode来开发。###### 用WideCharToMultiByte这个API: #include <stdio.h> #include <windows.h> int main() { FILE fp; wchar_t utf[1000], *p = utf; char ansi[2000]; fp = _wfopen(L"C:\1.txt", L"rb"); while(!feof(fp)) fread(p++, 1, 2, fp); *--p = L'\0'; fclose(fp); // utf+1剔除UTf-16标记 WideCharToMultiByte(CP_ACP, 0, utf + 1, -1, ansi, sizeof(ansi), NULL, NULL); puts(ansi); } ###### 楼上的给个链接就好,不用大篇幅复制。 卤煮的意思是说把“\u6C49\u5B57” 这个ASCII字符串转成两个汉字对吧~ ######不用别人的库,查unicode编码表?lz解决了说说方法呀######C++没解决,后来这个模块改用C#写了。###### 按二进制读,先读出0xFF 0xFE,后面数据的两个字节表示一个字,自己想办法读到wstring中 显示,用API的话,一个wcstombs ,一个WideCharToMultiByte 不用API的话自己查表,嵌入式程序可以查表,x86程序完全没那个必要 ###### 干嘛不用std::wstring ###### 用std::wstring吧,自己没有试过……,你可以去尝试下

kun坤 2020-06-07 13:49:51 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播