[英]convert unicode string to nsstring
我有一個unicode字符串
{\rtf1\ansi\ansicpg1252\cocoartf1265
{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 LucidaGrande;}
{\colortbl;\red255\green255\blue255;}
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{check\}}{\leveltext\leveltemplateid1\'01\uc0\u10003 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
\paperw11900\paperh16840\margl1440\margr1440\vieww22880\viewh16200\viewkind0
\pard\li720\fi-720\pardirnatural
\ls1\ilvl0
\f0\fs24 \cf0 {\listtext
\f1 \uc0\u10003
\f0 }One\
{\listtext
\f1 \uc0\u10003
\f0 }Two\
}
這里我有unicode數據\\ u10003,相當於“✓”字符。 我使用了[NSString stringWithCharacters:“\\ u10003”length:NSUTF16StringEncoding],這是拋出編譯錯誤。 請告訴我如何將這些unicode字符轉換為“✓”。
此致,熱潮
我有同樣的問題,以下代碼解決了我的問題
對於編碼
NSData *dataenc = [yourtext dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *encodevalue = [[NSString alloc]initWithData:dataenc encoding:NSUTF8StringEncoding];
用於解碼
NSData *data = [yourtext dataUsingEncoding:NSUTF8StringEncoding];
NSString *decodevalue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
謝謝
我使用下面的代碼將Uniode字符串轉換為NSString。 這應該工作正常。
NSData *unicodedStringData =
[unicodedString dataUsingEncoding:NSUTF8StringEncoding];
NSString *emojiStringValue =
[[NSString alloc] initWithData:unicodedStringData encoding:NSNonLossyASCIIStringEncoding];
在Swift 4中
let emoji = "😃"
let unicodedData = emoji.data(using: String.Encoding.utf8, allowLossyConversion: true)
let emojiString = String(data: unicodedData!, encoding: String.Encoding.utf8)
我認為:
你已經臨到\\u…\u003c/code>在你解析,需要將其轉換成字符以便進一步處理和/或包含在輸出文本輸入。
你已經排除了\\uc\u003c/code> ,這是一個不同的東西(如果我正確理解了RTF規范,它指定了跟在\\u…\u003c/code>序列之后的非Unicode字節數)。
\\u\u003c/code>后跟十六進制數字。
你需要解析那些數字; 該數字是序列表示的字符的Unicode代碼點編號。 然后,您需要創建包含該字符的NSString。
如果您正在使用NSScanner來解析輸入,那么(假設您已經掃過了
\\u\u003c/code>本身),您可以簡單地要求掃描儀掃描
scanHexInt:
。 將指針傳遞給
unsigned int
變量。
如果您沒有使用NSScanner,請執行任何有意義的操作,無論您正在解析它。 例如,如果您已將RTF數據轉換為C字符串並
strtoul
讀取它,則您將需要使用strtoul
來解析十六進制數字。 它將解釋您指定的任何基數(在本例中為16)中的數字,然后將指針指向下一個字符,無論您想要它。
然后,
unsigned int
或unsigned long
變量將包含指定字符的Unicode代碼點值。 在你的問題的例子中,那將是0x10003
,或U + 10003。
現在,對於大多數字符,您可以簡單地將其分配給
unichar
變量並從中創建NSString。 這在這里不起作用: unichar
只能達到0xFFFF
,而且這個代碼點高於那個(在技術方面,它在Basic Multilingual Plane之外)。
幸運的是,* CF * String有一個功能可以幫助您:
unsigned int codePoint = /*…*/;
unichar characters[2];
NSUInteger numCharacters = 0;
if (CFStringGetSurrogatePairForLongCharacter(codePoint, characters)) {
numCharacters = 2;
} else {
characters[0] = codePoint;
numCharacters = 1;
}
然后,您可以使用
stringWithCharacters:length:
從此16位字符數組創建NSString。
用這個:
NSString *myUnicodeString = @"\u10003";
感謝現代目標C.
如果它不是你想要的,請告訴我。
NSString *strUnicodeString = "\u2714";
NSData *unicodedStringData = [strUnicodeString dataUsingEncoding:NSUTF8StringEncoding];
NSString *emojiStringValue = [[NSString alloc] initWithData:unicodedStringData encoding:NSUTF8StringEncoding];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.