2009-11-10 19 views
8

Ich arbeite an einer SMS-Anwendung für das iPhone. Ich muss feststellen, ob der Benutzer Unicode-Zeichen innerhalb des NSString eingegeben hat, den er senden möchte.Erkennen von Unicode-Zeichen in NSString auf dem iPhone

Ich muss dies tun, weil Unicode-Zeichen mehr Platz in der Nachricht aufnehmen, und auch, weil ich sie in ihre hexadezimalen Äquivalente konvertieren müssen.

Also meine Frage ist, wie erkenne ich das Vorhandensein eines Unicode-Zeichens in einem NSString (die ich von einem UITextView gelesen habe). Wie konvertiere ich diese Zeichen dann in ihre hexadezimalen UCS-2-Entsprechungen?

Eg 繁 = 7E41, 体 = 4F53, 中 = 4E2D, 文 = 6587

+0

Alle Zeichen sind Unicode – user102008

Antwort

25

für nur ASCII-Zeichen Um zu überprüfen (oder eine andere Codierung Ihrer Wahl) verwenden:

[myString canBeConvertedToEncoding: NSASCIIStringEncoding] ;

Es gibt NO zurück, wenn die Zeichenfolge Nicht-ASCII-Zeichen enthält. Sie können die Zeichenfolge dann in UCS-2-Daten mit konvertieren:

[myString dataUsingEncoding: NSUTF16BigEndianStringEncoding];

oder NSUTF16LittleEndianStringEncoding abhängig von Ihrer Plattform. Es gibt geringfügige Unterschiede zwischen UCS-2 und UTF-16. UTF-16 hat UCS-2 abgelöst. Sie können sich hier über die Unterschiede lesen:

http://en.wikipedia.org/wiki/UTF-16/UCS-2

+0

@ Jeremy Bower, wenn ich [atext canBeConvertedToEncoding: NSUnicodeStringEncoding] aufrufen; es gibt immer Ja zurück, egal, ob ich einen Unicode-Zeichen (thailändischer Buchstabe) oder einen lateinischen Buchstaben eintippe. –

+0

@Ilker Baltaci: Das liegt daran, dass die Zeichen in Unicode konvertiert werden können. Unicode ist eine Obermenge von ASCII und enthält thailändische Zeichen. –

0

Ich konnte das nicht an die Arbeit.

I hat einen HTML-String mit   Geschütztes Leerzeichen

</div>Great Guildford St/SouthwarkSt & nbsp;Stop:& nbsp; BM<br>Walk to SE1 0HL<br> 
"Great Guildford St/SouthwarkSt \U00a0Stop:\U00a0 BM", 

Ich habe versucht, drei Arten von Encoder/Decoder

// NSData *asciiData = [instruction dataUsingEncoding:NSUTF16BigEndianStringEncoding];           
// NSString *asciiString = [[NSString alloc] initWithData:asciiData 
//  encoding:NSUTF16BigEndianStringEncoding]; 

// NSData *asciiData = [instruction dataUsingEncoding:NSASCIIStringEncoding];           
// NSString *asciiString = [[NSString alloc] initWithData:asciiData 
//  encoding:NSASCIIStringEncoding]; 

//little endian 
NSData *asciiData = [instruction dataUsingEncoding:NSUTF16LittleEndianStringEncoding];           
NSString *asciiString = [[NSString alloc] initWithData:asciiData 
    encoding:NSUTF16LittleEndianStringEncoding]; 

keiner von ihnen arbeitete. Sie schienen so zu arbeiten, wenn ich die Zeichenfolge NSLog es ok

NSLog(@"HAS UNICODE :%@", instruction); 
..do encode/decode 
NSLog(@"UNICODE AFTER:%@", asciiString); 

Welche Ausgabe

HAS UNICODE: St/SouthwarkSt  Stop:  BM 
UNICODE AFTER: St/SouthwarkSt  Stop:  BM 

aber ich zufällig diese in einer NSArray speichern aussieht und ich zufällig [stringArray description] und alle Unicode war nennen noch drin

instructionsArrayString: (
    "Great Guildford St/SouthwarkSt \U00a0Stop:\U00a0 BM", 
    "Walk to SE1 0HL" 
) 

so etwas in NSLog versteckt &nbsp; aber es zeigt, in NSArray Beschreibung, so dass Sie vielleicht denken, youve remo Ved den Unicode, wenn Sie nicht haben.

Wird eine andere Methode versuchen, die die Zeichen ersetzen.