2010-01-23 4 views
13

const char * dizesini NSString'e dönüştürmek için hangi yöntemin daha iyi olacağını merak ediyorum.
Bazı gerçekler olduğunu buldum.const char * dizgesini uzunluk ve NSString'e dönüştürme

  • [NSString stringWithCString: length:] türden bir kullanımdan kaldırılmıştır.
  • [NSString stringWithCString: kodlama] my amaç

için kullanılan Ama uzunluğu VE kodlama (ile dönüştürmek istediğiniz edilebilir Sanırım bazı ASCII olmayan karakteri varsa için kodlamayı ayarlayarak bu cezayı yapmak istiyorum çünkü UTF-8). Düşüncesi olan var mı?

Sadece

  1. diğer kömürü oluşturmak artık düşünmek ve std :: strncpy (CH1, CH2, len)
  2. kullanımı kullanarak uzunluğunda kopyalama [NSString stringWithCString: kodlamayı:]

Ama iyi çalışmıyor.

cevap

16

Kullanımı: En const char * değişken foo adlı (ve boş sonlandırılmış dize işaret) ise UTF-8 bir üst Çünkü

[NSString initWithBytes:length:encoding]. 
33

, sadece

[NSString stringWithUTF8String:foo] 

demek ASCII, bu foo UTF-8 veya ASCII olup olmadığını çalışacaktır. Ardından, sorunsuz bir şekilde Unicode'a geçebilirsiniz.

+4

Bu yalnızca dizginiz ASCII olsa da çalışır. Eğer dizginiz başka bir şeyse (örn. MacRoman veya ISO Latin), en iyi ihtimalle belirli bir karakter için yanlış glifin görüntülenmesini sağlayabilirsiniz, en azından bir NIL dizgisi elde edeceksiniz, çünkü geçersiz bir bayt dizisi oluşturmuşsunuzdur. geçerli bir UTF8 karakterini eşleştirin (Evet, bu mümkündür. UTF8, 256 farklı karakterden daha fazlasını kodlar, bu nedenle bir karakteri kodlayan çoklu bayt dizileri vardır ve bunlardan bazıları geçerli değildir (henüz). – uliwitness

+0

Çok kullanışlıdır Teşekkürler – vgonisanz