質問

私はOBJ-Cが初めてです(私の経験はJavaとLittle Cです)

私は最近このプロジェクトを持っています。これはアラビア語のテキスト暗号化です。アラビア語のテキストファイル(文字ごと)を読む必要がありますが、これらの文字を使用して変数(タイプのチャーの)に保存するときはできません。 'T ..この行でこの警告「マルチキャラクター文字定数」を与えてくれます。

char c = 'ب'; //ここで、文字「bah」をchar変数に保存しようとしています

エンコードの問題だと思いますが、問題が正確に何なのかわかりません。過去2日間は解決策を探して費やしましたが、それを見つけることができませんでした:( ..

前もって感謝します :)

役に立ちましたか?

解決

Chracter Viewerは、あなたのキャラクターがUnicode番号0x628であることを教えてくれます。わずか8ビットの1枚のチャーに保存するには大きすぎます。良いニュースは、それがユニカーに収まるということです。

unichar c = 'ب';

うまくいくかもしれません。しかし、コンパイラは、限られた文字セットの外で文字を処理できることを保証しません。安全のために、UTF-16を明示的に使用することをお勧めします(これは、NSStringsが内部で使用するものです。

unichar c = 0x628; // Arabic Beh (UTF-16)

または、UTF-8を好む場合、そのユニコード番号のUTF-8エンコードはD8 A8です。

char c[2] = { 0xD8, 0xA8 };  // Arabic Beh (UTF-8)

編集:

キャラクターをnsstringに入れるいくつかの方法:

使用-stringwithformat:

NSString* foo = [NSString stringWithFormat: @"beh %C", (unichar) 0x628];

または

NSString* foo = [NSString stringWithUTF8String: "beh \xD8\xAB"];

他のヒント

Objective-CでUnicodeに対処したい場合は、使用する必要があります NSString それ以外の char タイプ。 NSString Unicodeを扱うように設定されています。

使用する characterAtIndex文字列をループします

for (characterIndex = 0; characterIndex < [myString length]; characterIndex++)
{
    unichar testCharacter = [myString characterAtIndex:characterIndex];
    // do stuff
}
  1. 試しましたか unichar?単純 char エンコーディングに関係なく動作しません。小さすぎます。

  2. あなたは本当にシングルキャラクターと一緒に仕事をする必要がありますか? NSString しませんか?

  3. それはどのような暗号化ですか?その意味に関係なく、バイトストリームを暗号化できませんか?

NSDATAを使用することをお勧めします。したがって、必要なのは、NSStringからNSDATAオブジェクトを受け取ることだけで、そのバイトを要求し、それらをエンコードし、書き込みます。次。そのデータからnsstringをロード、デコード、および構築します。ここに有用な方法があります:

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding// for NSString
- (const void *)bytes// for NSData
- (void *)mutableBytes// if you prefer work with NSMutableData constructed from NSData with mutableCopy method
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding// to restore NSString back when decoding
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top