iOS全角符與半角符之間的轉換


iOS全角符與半角符之間的轉換

相關資料:

問題

  • 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、首先來看一下函數『CFString​Transform』的說明:

    正如它的 CF 前綴所表述的一樣,CFStringTransform 是 Core Foundation 中的一部分。這個函數傳入以下參數,並返回一個 Boolean 來表示轉換是否成功:

    • string: 需要轉換的字符串。由於這個參數是 CFMutableStringRef 類型,一個 NSMutableString 類型也可以通過自由橋接的方式傳入。
    • range: 轉換操作作用的范圍。這個參數是 CFRange,而不是 NSRange。
    • transform: 需要應用的變換。這個參數使用了包含下面將提到的字符串常量的 ICU transform string。
    • reverse: 如有需要,是否返回反轉過的變換。
  • 2、我們來看一下『Transform identifiers for CFStringTransform』:

      k​CFString​Transform​Strip​Combining​Marks
      The identifier of a transform to strip combining marks (accents or diacritics).
      
      k​CFString​Transform​To​Latin
      The identifier of a transform to transliterate all text possible to Latin script. Ideographs are transliterated as Mandarin Chinese.
      
      k​CFString​Transform​Fullwidth​Halfwidth
      The identifier of a reversible transform to convert full-width characters to their half-width equivalents.
      
      k​CFString​Transform​Latin​Katakana
      The identifier of a reversible transform to transliterate text to Katakana from Latin.
      
      k​CFString​Transform​Latin​Hiragana
      The identifier of a reversible transform to transliterate text to Hiragana from Latin.
      
      k​CFString​Transform​Hiragana​Katakana
      The identifier of a reversible transform to transliterate text to Katakana from Hiragana.
      
      k​CFString​Transform​Mandarin​Latin
      The identifier of a transform to transliterate text to Latin from ideographs interpreted as Mandarin Chinese. This transform is not reversible.
      
      k​CFString​Transform​Latin​Hangul
      The identifier of a reversible transform to transliterate text to Hangul from Latin.
      
      k​CFString​Transform​Latin​Arabic
      The identifier of a reversible transform to transliterate text to Arabic from Latin.
      
      k​CFString​Transform​Latin​Hebrew
      The identifier of a reversible transform to transliterate text to Hebrew from Latin.
      
      k​CFString​Transform​Latin​Thai
      The identifier of a reversible transform to transliterate text to Thai from Latin.
      
      k​CFString​Transform​Latin​Cyrillic
      The identifier of a reversible transform to transliterate text to Cyrillic from Latin.
      
      k​CFString​Transform​Latin​Greek
      The identifier of a reversible transform to transliterate text to Greek from Latin.
      
      k​CFString​Transform​To​XMLHex
      The identifier of a reversible transform to transliterate characters other than printable ASCII to XML/HTML numeric entities.
      
      k​CFString​Transform​To​Unicode​Name
      The identifier of a reversible transform to transliterate characters other than printable ASCII (minus braces) to their Unicode character name in braces.
      
      k​CFString​Transform​Strip​Diacritics
      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 實際上是『片假名』與『平假名』之間的轉換,『CFString​Transform』函數中的 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);
    

    轉換結果:wǒ shì zhōng wén
    轉換結果:wo shi zhong wen

    備注以上代碼是中文轉漢語拼音以及去掉音調符

備注

  • 請注意不是所有的『Transform identifiers』都支持逆轉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM