2017-07-02 1 views
-1

英語+アラビア語+絵文字をデータベースに保存して表示中に復元するソリューションを探しています。この文字列を "مرحباHello"データベースに保存して、uilabelに戻す

以下は、絵文字をサポートするために使用した、アラビア語のテキストが表示されていないコードです。

+(NSString *)emojiToSave:(NSString *)str 
{ 
    NSData *dataForEmoji = [str dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
    NSString *encodevalue = [[NSString alloc]initWithData:dataForEmoji encoding:NSUTF8StringEncoding]; 
    return encodevalue; 
} 
+(NSString *)emojiToDisplay:(NSString *)str 
{ 
    NSData *msgData = [str dataUsingEncoding:NSUTF8StringEncoding]; 
    NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSNonLossyASCIIStringEncoding]; 
    return goodMsg; 
} 

アラビア語のサポートには、どのような変更が必要なのですか?

ありがとうございます。

+0

たとえば文字列を入力できますか? –

+0

「こんにちは」 同じ例題は私もタイトルでも与えています。 –

+0

解決策は、Base64のコードはASCIIで含まれています、それはMySql、SQLite、SQL Serverなどのようなデータベースのすべての種類で受け入れられる必要があります。 –

答えて

1

は、データベースへのbase64コードを挿入し、base64でコードに変換してみてください。

//Original string to base64 string 
NSString *emojiString = @"مرحبا Hello"; 
NSData *emojiData = [emojiString dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *base64String = [emojiData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 

//Base64 string to original string 
NSData *base64Data = [[NSData alloc] initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters]; 
NSString *originalString =[[NSString alloc] initWithData:base64Data encoding:NSUTF8StringEncoding]; 

NSLog(@"Result: %@",originalString); 

出力: enter image description here

+1

OPコードの問題は、ASCIIとUTF8エンコーディングを混在させていることです。 – Michael

+0

はい。しかし、データベースは、絵文字コードをサポートしていない可能性があります。例えば、utf8mb4を使わないMySqlのように絵文字コードをテーブルに保存することはできません。したがって、Base64コードはこのケースではかなりのオプションです。 –

+0

ソートや全文検索のようなものでは、クリアテキストはbase64よりも優先されます。その列のデータベースエンコーディングをbase64ハンマーを使用するよりも1つの 'ALTER'ステートメントで修正する方が良い – Michael

1

あなたは絵文字やアラビア文字をサポートしてエンコーディングを使用する必要があります。 ASCIIはそれをサポートしていません。

あなたはどこでもNSUTF8StringEncodingを使用する必要があります。

なぜASCIIを使用していますか?文字列をNSDataに変換してから、NSStringに再度戻すのはなぜですか?それは意味をなさない。

関連する問題