0

初歩的な質問かもしれませんがすみません。

さまざまな理由で、次のような奇妙な文字列に悩まされています。

NSString *myString = @"A\\314\\212A\\314\\210O\\314\\210.jpg";

忍者のように二重の \\ を削除して、文字列が Uniencoded であり、このように読み取られる必要があることを NSString に理解させることはできますか?

NSString *myString = @"A\314\212A\314\210O\314\210.jpg"; // Displays ÅÄÖ as expected

すべてのスラッシュ ("\") を置き換えようとするさまざまな戦略を試しましたが、("\") NSString を追加するとすぐに、最初のスラッシュをエスケープするために別のスラッシュが追加されます。そして、ここで行き詰まる…

NSString が私の文字列をエスケープするのを防ぐことは可能ですか?

アップデート

これは特殊なケースであることは承知しています。ユーザーのドライブ上のファイルを読み取る端末プログラムからの出力の読み取り。NSTask を介して、出力を解析して配列に分割するために出力を NSString にキャプチャしています。非ASCII文字がない限り、うまく機能します。HFS+ は、NFD と呼ばれるわずかに異なる Unicode で非 ASCII 文字をエンコードしています。

応答をキャプチャしているとき、ÅÄÖ は次のように qouts 内に既にエンコードされています。

file.jpg
file2.jpg
"A\314\212A\314\210O\314\210.jpg"

NSString を作成し、応答をキャプチャすると、NSString によってもう一度エスケープされます。

A\\314\\212A\\314\\210O\\314\\210.jpg

これが最適ではないことは承知していますが、現在、端末プログラムが出力しているものを制御できません。通常、この NFD エンコーディングで NSString が作成されると、Objectiv-C がエンコーディング/デコーディングを処理します。しかし、二重にエスケープされたコンテンツが混在する文字列があるため、それを作成して NSString にコンテンツがこのエンコーディングでエンコードされていることを理解させるのは難しい方法です。

基本的に私はこれをしたいと思います:

decodedString = [output stringByReplacingOccurrencesOfString:@"\\\\"
                                                      withString:@"\\"];

しかし、舞台裏では NSString は常に \ を別の \ でエスケープしているので、NSString が干渉することなく「生の」文字列を作成する方法が必要です。

NSString で Unicode エンコーディングを強制しようとするさまざまな方法を試しましたが、結局のところ、NSString は常に \ をキャプチャしてエスケープしています。

ヒントやポイントをいただければ幸いです。

4

1 に答える 1

0

逆に、端末プログラムからの出力をこのようにエンコードしないように変更する以外に、これを回避する方法は見つかりませんでした。

于 2015-06-18T21:44:49.520 に答える