iOS全角符与半角符之间的转换
iOS全角符与半角符之间的转换
相关资料:
- 函数『CFStringTransform』中文 详情;
问题
1、17-03-15,「有人在群里边问怎么把『半角』符字符串转换成『全角』字符串?」,百度的结果如下:
全角转半角方法如下(略有出入,原文使用的是『MRC』,现在使用的『ARC』):
NSString * string = @"abcdefg,"; NSMutableString *convertedString = [string mutableCopy]; CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformFullwidthHalfwidth, false); NSLog(@"ddc:%@",convertedString);
输出结果:
ddc:abcdefg,结果转换成功。
半角转全角只需要把 kCFStringTransformFullwidthHalfwidth 换成kCFStringTransformHiraganaKatakana 即可。
NSString * string = @"abcdefg,"; NSMutableString *convertedString = [string mutableCopy]; CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformHiraganaKatakana, false); NSLog(@"ddc:%@",convertedString);
输出结果:
ddc:abcdefg,结果转换失败。
解决
1、首先来看一下函数『CFStringTransform』的说明:
正如它的 CF 前缀所表述的一样,CFStringTransform 是 Core Foundation 中的一部分。这个函数传入以下参数,并返回一个 Boolean 来表示转换是否成功:
- string: 需要转换的字符串。由于这个参数是 CFMutableStringRef 类型,一个 NSMutableString 类型也可以通过自由桥接的方式传入。
- range: 转换操作作用的范围。这个参数是 CFRange,而不是 NSRange。
- transform: 需要应用的变换。这个参数使用了包含下面将提到的字符串常量的 ICU transform string。
- reverse: 如有需要,是否返回反转过的变换。
2、我们来看一下『Transform identifiers for CFStringTransform』:
kCFStringTransformStripCombiningMarks
The identifier of a transform to strip combining marks (accents or diacritics). kCFStringTransformToLatin
The identifier of a transform to transliterate all text possible to Latin script. Ideographs are transliterated as Mandarin Chinese. kCFStringTransformFullwidthHalfwidth
The identifier of a reversible transform to convert full-width characters to their half-width equivalents. kCFStringTransformLatinKatakana
The identifier of a reversible transform to transliterate text to Katakana from Latin. kCFStringTransformLatinHiragana
The identifier of a reversible transform to transliterate text to Hiragana from Latin. kCFStringTransformHiraganaKatakana
The identifier of a reversible transform to transliterate text to Katakana from Hiragana. kCFStringTransformMandarinLatin
The identifier of a transform to transliterate text to Latin from ideographs interpreted as Mandarin Chinese. This transform is not reversible. kCFStringTransformLatinHangul
The identifier of a reversible transform to transliterate text to Hangul from Latin. kCFStringTransformLatinArabic
The identifier of a reversible transform to transliterate text to Arabic from Latin. kCFStringTransformLatinHebrew
The identifier of a reversible transform to transliterate text to Hebrew from Latin. kCFStringTransformLatinThai
The identifier of a reversible transform to transliterate text to Thai from Latin. kCFStringTransformLatinCyrillic
The identifier of a reversible transform to transliterate text to Cyrillic from Latin. kCFStringTransformLatinGreek
The identifier of a reversible transform to transliterate text to Greek from Latin. kCFStringTransformToXMLHex
The identifier of a reversible transform to transliterate characters other than printable ASCII to XML/HTML numeric entities. kCFStringTransformToUnicodeName
The identifier of a reversible transform to transliterate characters other than printable ASCII (minus braces) to their Unicode character name in braces. kCFStringTransformStripDiacritics
The identifier of a transform to remove diacritic markings.
具体的自己翻译哈啊(附表一部分翻译结果 来源):
|Transformation |Input| Output|
|----------------|-----|--------|
|kCFStringTransformLatinArabic| mrḥbạ| مرحبا |
|kCFStringTransformLatinCyrillic| privet| привет|
|kCFStringTransformLatinGreek| geiá sou| γειά σου|
|kCFStringTransformLatinHangul| annyeonghaseyo|안녕하세요|
|kCFStringTransformLatinHebrew| şlwm| שלום|
|kCFStringTransformLatinHiragana| hiragana| ひらがな|
|kCFStringTransformLatinKatakana |katakana| カタカナ|
|kCFStringTransformLatinThai| s̄wạs̄dī| สวัสดี|
|kCFStringTransformHiraganaKatakana| にほんご| ニホンゴ|
|kCFStringTransformMandarinLatin| 中文| zhōng wén|
3、于是乎 kCFStringTransformHiraganaKatakana 实际上是『片假名』与『平假名』之间的转换,『CFStringTransform』函数中的 reverse 参数意思是转换过程是否可逆;
NSString * string = @"abcdefg,"; NSMutableString *convertedString = [string mutableCopy]; CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformFullwidthHalfwidth, true); NSLog(@"ddc:%@",convertedString);
输出结果:
ddc:abcdefg,结果转换成功。
彩蛋
请尝试下列代码:
NSString * string = @"我是中文"; NSMutableString *convertedString = [string mutableCopy]; CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformMandarinLatin, false); NSLog(@"转换结果:%@",convertedString); CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformStripDiacritics, false); NSLog(@"转换结果:%@",convertedString);
备注
- 请注意不是所有的『Transform identifiers』都支持逆转
iOS全角符与半角符之间的转换的更多相关文章
- Java 全角字符转半角字符
1.java代码里有时候会遇到代码注入的安全问题,为了防止这种问题,增加了一个过滤功能.主要是过滤全角字符,把url不能识别的全角字符转换成半角字符 public class Test { publi ...
- php全角字符转换为半角函数
<?php /** * 全角字符转换为半角 * * @param string $str * @return string public function Sbc2Dbc($str) { $ar ...
- php全角字符转换为半角函数 实例代码
PHP全角半角转换函数,把目前能找到的所有全角都列出来了一个个替换吧. 之前试过网上找的通过ASCII之类的字符替换,发现很多莫名其妙的问题.最后还是换成下面的字符替换方式了,把目前能找到的所有全角都 ...
- js全角字符转为半角字符
//全角转半角 function CtoH(str){ var result=""; for (var i = 0; i < str.length; i++){ if (st ...
- 关于JAVA正则匹配空白字符的问题(全角空格与半角空格)
今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下 \s 不支持全角 1.& ...
- c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
调用 this.ImeMode = ImeMode.OnHalf; ImeMode 枚举:指定一个值,该值是用来确定在选定了对象时该对象的输入法编辑器 (IME) 的状态. 以下是微软的解释: 成员名 ...
- C# 全角符号转半角
public static string SBCCaseToNumberic(string SBCCase) { char[] c = SBCCase.ToCharArray(); ; i < ...
- JS INPUT输入的时候全角自动转为半角
function CtoH(obj){var str=obj.value;var result="";for (var i = 0; i < str.length; i++) ...
- Java全角、半角字符的关系以及转换
如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...
随机推荐
- Windows服务的创建、安装、卸载
1.新建Window服务项目 2.添加安装配置文件 3.serviceProcessInstaller1右键属性,设置Account属性为LocalSystem. serviceInstaller1右 ...
- 蓝桥网试题 java 基础练习 特殊回文数
------------------------------------------------------------------------------------- 简单点,对话的方式简单点 有 ...
- (@WhiteTaken)设计模式学习——工厂方法模式
这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口.而简单工厂,把核心写在了一个类上,不利于拓展. 举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个F ...
- 循环语句——for语句
一.for语句结构:for (初始化表达式; 循环条件表达式 ;循环后的操作表达式 ) { 执行语句: } 循环条件表达式,必须是true或false 示例: class ForDemo { publ ...
- JavaScript中国象棋程序(6) - 克服水平线效应、检查重复局面
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第6节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- JLOI2015 解题报告
JLOI2015 真的不愧是NOI出题组出的,题目难度够吊.不过每一道都是结论题和乱搞题真的很不好玩... T1:[JLOI2015]有意义的字符串 首先贴下popoqqq的blog吧 感性的认识就是 ...
- 1023: [SHOI2008]cactus仙人掌图(DP+单调队列优化)
这道题吗= =首先解决了我多年以来对仙人掌图的疑问,原来这种高大上的东西原来是这个啊= = 然后,看到这种题,首先必须的就是缩点= = 缩点完之后呢,变成在树上找最长路了= =直接树形dp了 那么那些 ...
- [Kafka] - Kafka基本操作命令
Kafka支持的基本命令位于${KAFKA_HOME}/bin文件夹中,主要是kafka-topics.sh命令:Kafka命令参考页面: kafka-0.8.x-帮助文档 -1. 查看帮助信息 b ...
- java集合框架04——LinkedList和源码分析
上一章学习了ArrayList,并分析了其源码,这一章我们将对LinkedList的具体实现进行详细的学习.依然遵循上一章的步骤,先对LinkedList有个整体的认识,然后学习它的源码,深入剖析Li ...
- 部分linux系统命令(shell 命令)和hadoop命令
linux系统命令(shell 命令): ls : 只列出文件/目录 ls -l : 会显示文件的详情,如大小等 ls -lh : 会显示文件的详情,但大小以k或者M为单位 ls ../ : ...