Tag: unicode

在Swift中使用字符集

它们并不是特别常见,并且您不会像在数组,字典或循环中那样频繁地在代码中遍历它们。 但是,当您确实需要它们时,它们可能会非常有用。 我在说什么 字符集! 第一次我真的需要使用一个字符集时,初始化和实现一个字符集无疑使我感到困惑,因此,我当然想进一步探讨这个主题。 什么是字符集? Apple告诉我们,字符集是一种类型的集-一种无序的唯一元素集合-包含符合Unicode的字符。 由于它们是无序的并且不包含重复项,因此字符集通常用于搜索操作,而不是用于存储和访问信息。 创建自己的字符集很容易。 下面,字符集元音被初始化为包含字母a,e,i,o和u 。 将字符集付诸实践 现在,我们可以使用此字符集在字符串中进行搜索。 假设我有两个常量字符串, fullWord和shortWord: 这些字符串是否包含元音中的任何字符? 我们如何检查? 我发现做到这一点的一种方法是使用rangeOfCharacter(from:)函数,该函数将字符集作为参数。 (由于使用该功能不能使字符集无效,因此还需要将其拆开。) 虽然这很笨拙,但肯定有一些更优雅的方法可以找到答案。 嗯 有什么我想念的吗? 字符集还有什么用呢? 字符集类型属性 字符集的一个非常有用的方面是它们的类型属性。 基本上,这些都是基于Unicode类别的预包装字符组,可供您使用! 这些类型属性的一些示例是: 您可以在Apple的API参考中找到完整的字符集列表。 让我们在下面更详细地研究其中的一些。 标点属性 如果您对字符集可能包含的内容有所了解,但又不了解每个字符的详尽列表,那么字符集类型属性将是极好的选择。 例如,想到标点符号。 如果您想删除字符串中的所有标点符号,而只剩下字母,该怎么办? 您将搜索并排除哪些标点符号? 我想取出句号 , 逗号 , 感叹号 , 问号 , 冒号 , 分号 , 连字符 , 破折号 , 撇号 , 引号 , 正斜杠 […]

为什么编码很重要:位和字节入门

那是编码的黑暗时代。 交流很容易中断,普通用户很难弄清楚到底出了什么问题。 此问题是由于使用不同的编码来读取字节序列而导致的。 要了解此问题的症结,我们来看两个关键术语: 位 :信息的基本单位,通常表示为0或1 字节 :固定长度的位序列,通常由8位组成 因此,一个字节将被表示为2⁸= 256个数字,范围从0到255(或以位为00000000到11111111)。 字节中的位被赋予索引。 最右边的位(也称为最低有效位 )的索引为0,最左边的位(也称为最高有效位 )的索引为7。 今天,情况仍然如此,顺便说一句! 至少可以说,使用二进制(或十六进制)表示法麻烦且效率低下。 需要某种编码标准。 这就是奇怪的地方,因为您可能已经猜到,原始位序列的含义根据所使用的编码而改变。 输入ASCII码 ASCII是一种字符编码标准,它使用7位表示基于英文字母的128个指定字符。 0到32之间的数字保留给控制字符,这些控制字符指示如何解释和表示数据。 它们被设计用于打印控制,数据结构和传输控制。 所有未重音的英文字符都使用32到127之间的数字。 这里的关键是ASCII是为不重音的英语字符设计的。 尽管该编码仅使用7位(不使用整个位),但是ASCII不能轻松地用于许多其他语言。 例如,亚洲字母有成千上万个字母,这些字母再也不会适合8位。 许多其他字母都使用重音,例如ˆ ´ , ¨等。 因此,就像美国开发ASCII ,其他国家也创建了自己的编码。 这导致了基于不同语言的需求和细微差别以及需要进行转码的各种代码标准的不一致混合。 实质上,不同的国家/地区具有不同的编码标准。 当计算机问世时,就不可能在为不同标准量身定制的软件之间有效地交换信息。 然后是ISO/IEC 8859 —一种与8位 ASCII向后兼容的编码,由来自拉丁文字的191个字符组成。 它包含各种口音 ,可以完全覆盖南非语,科西嘉语,法罗语,挪威语和许多其他内容。 但是, ISO/IEC 8859仅使用单字节固定长度编码对前256个Unicode字符进行编码,这意味着某些语言仍然不兼容。 例如,考虑为西里尔字母设计的ISO/IEC 8859–5 : 以及GB 18030中华人民共和国的官方字符集: 尽管西里尔字母已集成在ISO/IEC 8859 ,但它不支持中文书写系统。 输入Unicode Unicode是一种计算行业标准,用于对世界上大多数书写系统中表示的文本进行一致的编码,表示和处理。 最新版本的Unicode(9.0)包含超过128,000个字符的库,涵盖135个现代和历史性脚本以及多个符号集。 […]

了解Swift的CharacterSet

tldr:单击 此处 查看 CharacterSet.decimalDigits 所有 CharacterSet.decimalDigits 您是否曾经需要检查过字符串是否仅由数字组成? 标点符号或非字母数字字符的存在如何? 一个人可以使用多种方法,从Formatter类之一到NSScanner甚至是NSPredicate ,但是您发现的最可能的代码片段涉及到使用反向的CharacterSet 。 简而言之, CharacterSet是一个由Objective-C桥接的Swift类,它代表一组Unicode字符。 它的Objective-C对应物NSCharacterSet本身是免费的,与Core Foundation的CFCharacterSet桥接。 CFCharacterSet用C编写,相当古老,至少可以追溯到Mac CFCharacterSet的主要思想是提供一种支持Unicode的数据结构,以帮助有效地搜索Unicode字符串。 NSString和NSScanner内部使用NSCharacterSet进行字符串搜索操作。 可以将CharacterSet初始化为空集,也可以将其初始化为字符串,字节或文件内容中存在的一组字符。 它带有许多方便的预定义集合(例如URL查询片段中允许的字符或字母数字字符),甚至还允许集合代数(例如并集,交集和异或)。 使用CharacterSet的预定义集合之一感觉很方便: 请注意,四个8位和两个16位都加起来为32位。 这完全是设计使然:UTF32是固定宽度格式,UTF8和UTF16可以轻松装入其中,而无需进行任何额外工作。 所有UTF32字符都包含32位,即使不是必需的。 这使格式无效,但是有一个好处 :它非常适合搜索,因为您可以遍历第32位以获得下一个字符,而不用解码每个字节来解码该字符的代码点宽度。 这正是NSCharacterSet.characterIsMember(UTF8 or UTF16 or UTF32)内部调用仅接受UTF32字符的longCharacterIsMember(UTF32)的原因NSCharacterSet.characterIsMember(UTF8 or UTF16 or UTF32) 在CharacterSet搜索字符成员资格的最佳方法是获取该CharacterSet的UTF32代码点,并将其传递给NSCharacterSet的longCharacterIsMember() 。 看起来像这样: 以下是将字符的代码点值转换为UTF8二进制文件的方法:在上表中的所有x s中填充字符的二进制值。 要确定需要多少字节,请考虑二进制字符编码的长度。 1字节的UTF8仅可容纳7位(表中仅7 x s)。 一个2字节的UTF8可以容纳11位。 3字节可容纳16位,而4字节UTF8可容纳21位。 对于“€”字符(U + 20AC 10 0000 1010 1100 ),我们至少需要14位,这意味着它将需要3个字节的结构,可以容纳12至16位。 填充到UTF8结构中的二进制数字如下所示: […]

在Swift中将Unicode转换为UTF8

我正在使用Maps API,并且在国外search某些地址时,地址会返回Unicode字符,如下所示: "Place du Panth\U00e9on", "75005 Paris" 这个例子中的unicode字符是\ u00e9这是é 我遇到的麻烦是SwiftyJSON pukes,如果我已经将这些数据保存在JSON文件中,并尝试读取它。 SwiftyJSON不喜欢反斜杠字符'\'JSON是有效的,即使我可以读它,它仍然不好,因为我宁愿显示正确以及所有其他Unicode字符。 有没有人有任何想法如何将所有Unicode字符转换为UTF8编码的字符在斯威夫特? 我应该只是写一个函数,search所有的Unicode字符,然后转换它们?

从API响应打印Unicode表情符号

我从一个API接收string@"\\U0001F603" ,这是表情符号Unicode的Unicode代码点。 我想使用UILabel的text属性来显示它。 如果我直接设置它,它会显示\U0001F603而不是实际的表情符号。 如何在收到的Unicode代码点显示表情符号?

iOS中的Unicode标量

是否有可能在iOS中创build自定义Unicode标量值或将现有值映射到位图字形? 我很好奇,看看是否可以创build自定义字符和string像苹果公司的表情符号。

通过RubyMotion在UILabel中使用unicode字符

我试图使用Unicode私有空间字符并将其设置为UILabel的text属性。 这是使用RubyMotion。 我想要的angular色是Entypo家族的一部分,是U+1F554 ( 🕔 )。 我创build一个新的UILabel : @lblIcon = UILabel.alloc.initWithFrame([[0,(self.view.frame.size.height/2) – 128],[self.view.frame.size.width,96]]) 并使用pack语法将其文本设置为Unicode字符。 @lblIcon.text = [0x1f554].pack('U*') 然后,我应用图标字体并将其添加到视图中: ico_font = UIFont.fontWithName("Entypo", size:48) @lblIcon.font = ico_font self.view.addSubview @lblIcon 当我运行rake并尝试启动应用程序时,出现以下消息: *** Terminating app due to uncaught exception 'RuntimeError', reason: 'ui_label.rb:16:in `font=:': NSInvalidArgumentException: NSConcreteMutableAttributedString addAttribute:value:range:: nil value (RuntimeError) 我也试过了 @lblIcon.text = [0x1f554].pack('U*') + "" 和 @lblIcon.text = "\U1F554" […]

使用部分缓冲区将多字节Unicode字节数组转换为NSString

在Objective C中,有一种将多字节Unicode字节数组转换为NSString的方法,即使数组数据是部分缓冲区(不是完整的字符边界),也可以使转换成功。 这个应用程序在接收stream中的字节缓冲区时,要分析数据缓冲区的string版本(但是会有更多的数据来,并且缓冲区数据没有完整的多字节Unicode)。 NSString的initWithData:encoding:方法不适用于此目的,如下所示… testing代码: – (void)test { char myArray[] = {'f', 'o', 'o', (char) 0xc3, (char) 0x97, 'b', 'a', 'r'}; size_t sizeOfMyArray = sizeof(myArray); [self dump:myArray sizeOfMyArray:sizeOfMyArray]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 1]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 2]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 3]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 4]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 5]; } – […]

setlocale()在iOS模拟器中不起作用?

更新:奇怪的是,setlocale()只在iOS模拟器上失败,所以我修改了问题标题。 它在实际设备上正常工作。 我正在使用iOS 6下的本地(C / C ++)代码,我需要格式化任意的wchar_tstring。 但是,在格式化包含Latin-1代码页外的代码点的string时, swprintf失败(返回值为errno = EILSEQ值-1)。 wchar_t buff[256]; swprintf(buff, 256, L"\u00A9 %ls", L"ascii"); // works swprintf(buff, 256, L"\u03A0 %ls", L"ascii"); // will return -1 在问这里的相关问题之后,问题似乎是语言环境设置不正确(我已经validation该解决scheme在Mac OS X下工作)。 但在iOS 6下似乎没有效果: #include <locale.h> setlocale(LC_CTYPE,""); 按照这里的说明,我已经手动复制/添加区域设置文件到我的项目,并设置PATH_LOCALE环境variables,但问题依然存在: NSString* resourcePath=[[NSBundle mainBundle] resourcePath]; setenv("PATH_LOCALE", [resourcePath UTF8String], 1); setlocale(LC_CTYPE,"en_US.UTF-8"); 有谁知道我可以如何让setlocale()在iOS 6下工作(同时还有苹果商店接受的应用程序)?

哪个OS版本和iOS版本支持哪些Unicode版本?

是否有列表或图表显示各种OS X和iOS版本支持哪个版本的Unicode? 我找不到来自苹果的任何文档。