2011-08-06 10 views
3

UTF-8文字列をUCS-2文字列に変換しようとしています。 "\ uFF0D \ uFF0D \ u6211 \ u7684 \ u4E0A \ u7F51 \ u4E3B \ u9875"のような文字列を取得する必要があります。 私は約1ヶ月前にGoogleで検索しましたが、まだUTF-8をUCS-2に変換することに関するリファレンスはありません。 誰か助けてください。 Thxを事前に入力してください。Objective-cのUTF-8値をUCS-2値に変換する方法を教えてもらえますか?

EDIT:大丈夫、多分私の説明は十分ではありませんでした。ここに私がやろうとしていることがあります。 私は韓国に住んでおり、CTMessageCenterを使ってSMSメッセージを送信しようとしています。私は私のアプリを通して中国語の簡体字を送ろうとしました。私は?適切な文字の代わりに。そこで私はUTF-8、UTF-16、BE、LEも試しました。しかし彼らはすべて戻ってくる??。最後に、SMSは韓国でUCS-2とEUC-KRエンコーディングを使用していることがわかりました。奇妙な、それじゃない? とにかく\ u4E3B \ u9875のような文字列を送ろうとしましたが、うまくいきました。 したがって、まず文字列をUCS-2エンコーディングに変換し、それらの文字列から文字列リテラルを取得する必要があります。

+0

"\ uFF0D \ uFF0D \ u6211 \ u7684 \ u4E0A \ u7F51 \ u4E3B \ u9875"はUCS-2文字列ではありません。 Unicodeコードポイントで指定された文字を含めるには、 '\ u'エスケープシーケンスを使用するCまたはObjective-C文字列リテラルです。 UCS-2や文字列リテラルが本当に必要ですか? – Codo

+0

私はUCS-2エンコーディングとその文字列リテラルが必要です。 –

+0

UCS-2は基本的にUTF-16と同じです。 –

答えて

2

Wikipedia

古いUCS-2(2バイトユニバーサル文字セット)は1996年7月における Unicode標準のバージョン2.0にUTF-16に取って代わられた同様の 文字エンコーディングです。 2単純にコードポイントを16ビットコード単位として使用して固定長形式 を生成し、 の0〜0xFFFFの範囲のすべてのコードポイントの96.9%に対して、 と全く同じ結果を生成します。その時点で値が に割り当てられていたすべての文字。

IBM

UCS-2規格は65,535文字に制限され、そしてデータ 加工産業が94,000を超える文字が必要、UCS-2標準 が置き換え処理中であるのでUnicode UTF-16標準に準拠しています。しかし

、UTF-16は、既存のUCS-2規格、 あなたがいる限り、それはであるかのようにアプリケーションがUCS-2の治療として、UCS-2 サポートを既存のシステムを使用してアプリケーションを開発することができますのスーパーセットであるため、 UTF-16

uincode.org

UCS-2サロゲートコードポイントと UTF-16は、標準のバージョン2.0に追加される前、ユニコード1.1までのUnicode 実装を指す廃止用語です。この用語は現在 になるはずです。

UTF-16とUCS-2 はデータ交換の目的で同一であるため、UCS-2では個別のデータ形式は定義されていません。両方とも16ビットであり、 はまったく同じコードユニット表現を持っています。

したがって、ほとんどの言語ライブラリで "UTF8toUnicode"変換を使用すると、本質的にUCS-2であるUTF-16が生成されます。 Objective-C文字列から16ビット文字を抽出するだけで、同じことが達成されます。

言い換えれば、解決策はあなたの顔を全部見つめています。

+0

UTF-8はすでにUnicodeなので、 'UTF8toUnicode'は意味をなさない関数名ではありません。これは、マイクロソフトのバグのようなものです。 – tchrist

+0

私はそれを総称として使用していました。ほとんどの言語ライブラリは、UTF-16を「Unicode」と呼んでいます。 –

+0

私は10年以上にわたってUnicodeを扱ってきました。そして、「Unicode」は、もともとJavaがUTF-16をどのように参照していたかを示しています。ユニコードがもともと発明された時、すべての目的と目的のためにUTF-32は存在せず、「正しい」かどうかにかかわらず、「Unicode」と「UTF-16」は交換可能な用語として扱われました。 –

0

UCS-2は有効なUnicodeエンコードではありません。 UTF-8はです。

したがって、UTF-8をUCS-2に変換することは不可能であり、実際には逆も可能です。

UCS-2は古くからの歴史です。平和のうちに腐らせる。

+0

すべてのUTF-8文字列をUCS-2に変換できるわけではありませんが、実際には多くのことが可能です。さらに、多くのシステムと文字列ライブラリは、異なるエンコーディングに変換できない文字を扱ういくつかのメソッドをサポートしています。すべてのUTF-8文字列をISO-8859-1に変換することはできませんが、実際には非常に頻繁に必要とされています。あなたはあなたの答えに少し厳しいです。 – Codo

+0

@Codo:どちらも有効なUnicodeエンコーディングではないので、UTF-8をUCS-2に変換するのと同じように、UTF-8をLatin1に変換することは意味がありません。ただし、すべてのLatin1コードポイントは有効なUTF-8として表すことができます。これはUCS-2では当てはまりません。それは対称的な状況ではありません。とにかくAppleのioSファイルシステムがUCS-2を使用していることはわかりません。それは、野生のNFDでないUTF-16を使用しているようです。問題は、Unicodeの概念が不明確であるという不明瞭な考え方を裏付けるものです。 – tchrist

+1

私はあなたが方法のポイントではないと思う。私がしようとしているのは、UTF-8からUCS-2に変換する方法を見つけることです。そして、C#や他の言語でこれを行う方法はまだまだたくさんあります。 –

関連する問題