2012-02-15 13 views
0

Objective-CでiOSアプリケーションを開発していますが、磁気ストライプリーダーを読み取ることができる​​を使用しています。私はSDKを使用しています。私がカードをスキャンすると、標準ASCIIでエンコードされたNSDataオブジェクトを受け取ります。NSDataオブジェクトをエンコードまたは変換する方法

残念ながら、私は、別のASCIIでエンコードされるように思われるデンマークの医療カードをスキャンすることができISO/IEC 646:1991 Norwegian/Danishよ: 例えばhttp://www.ascii.ca/iso646.no.htm

、医療カード上の人物名がØが含まれている場合、それが表示されます\となります。これは、カードで使用されているエンコーディングがØ(上のリンクを参照)に対して小数点92を使用しているのに対して、標準のASCII小数点92は、\という文字に評価されるためです。このため、Æ、Ø、Åのような特殊文字が含まれていると名前を読み取ることができません。

私の質問は、 NSDataオブジェクトを正しいフォーマットに変換/エンコードするにはどうしたらいいですか?

+0

どのようにNSDataオブジェクトを表示しますか? – iDifferent

+0

現在、NSLogを使用するコンソールとUITextFieldの両方にあります。 – dhrm

答えて

1

、ISO 646は、各文字のための単一の定義を提供していません。これは7ビットのASCII文字を表し、領域固有のバリアントを使用して定義された文字セット内の特定の範囲があります。詳細については、the ISO 6464 Wikipedia pageを参照してください。

この結果、どの地域でも正常に動作するように、これを一般的に処理する具体的な方法はありません。私はカードの標準に精通していませんが、カードのデータに適用するバリアントを示す特定のバイトがあるかどうかを知ることは興味深いでしょう。言い換えれば、英語、ドイツ語、デンマーク語、またはその他の変形を適用するかどうかを示す情報がありますか?

適用するバリアントがわかったら、このデータをISO 8859-1に変換することをサポートするCライブラリを探すのが最善の方法です。データをISO-8859-1(または同様の)形式にしたら、kCFStringEncodingISOLatin1を使ってNSStringに変換できます。

iOSで利用できるISO-646からISO-8859-1への変換ライブラリがあるかどうかはわかりません。この種のことで私が見てきた最も一般的なCライブラリはlibiconv GNUライブラリですが、iOSでサポートされているケースについて具体的な変換はないと思います。それになっても、このman pageに示されている変換テーブルを使用して手動でバイトを変換するのは難しくありません。ご覧のとおり、指定されたバリアントで変換する必要がある文字数はごくわずかです。

0

は、NSStringの-initWithBytesを使用しよう:長さ:エンコーディング:

+0

NSDataオブジェクトをバイト配列に変換する必要がありますか?私はどのエンコーディングを使うべきですか? – dhrm

+0

より良い1 [[NSStringのののalloc] initWithData:NSDataのエンコーディング:以下のいずれかを持つ: kCFStringEncodingMacRoman kCFStringEncodingWindowsLatin1 kCFStringEncodingISOLatin1 kCFStringEncodingNextStepLatin kCFStringEncodingASCII kCFStringEncodingUnicode kCFStringEncodingUTF8 kCFStringEncodingNonLossyASCII、1はあなたを助けることができるかわかりません。 – Allen

0

はこれを試してみてください:残念ながら

[NSString stringWithData:data encoding:NSUTF8StringEncoding]

+0

私は同じ結果を試しました。 UTF8小数点では、バックスペースとして評価されています。 – dhrm

関連する問題