Unicodeはとても楽しい

この話はほぼ一ヶ月前に起こりました。 あるエゴールがSkypeをノックした。



エゴール:こんにちは、フリーランサーをお探しですか?)

私:そして、あなたは何ができますか?

エゴール:そして実際、私たちは実際にどのように経験のために働きたいかを知りません。)


Yegorは優秀な人物であることが判明したため、cjCoreをテストすることを提案しました。



それが何であるかを説明する必要があります。 githubには、ベストプラクティスをダンプするリポジトリがあり、cjCoreはC ++ライブラリの1つです。



エゴールは自分自身のライブラリをクローンしてコンパイルしようとしましたが、そこにはありませんでした。 彼はUnicode文字列のコンパイルに問題がありました。



ご存知のように、標準C ++には通常のUnicode文字列はないため、多くの人がこのために独自のクラスを作成します。 たとえば、QtにはICUライブラリに基づいた独自のQStringがあります。 また、独自の行を作成することも決定しましたが、ICUではなくBoostまたはC ++ 11ライブラリを使用して、誰が一番好きかを選択し始めました。



EgorにはUbuntuの最新バージョンがありますが、何らかの理由でC ++ 11から行をコンパイルしたくなかったため、行のためだけにBoostを引くことは高価すぎると考え(途中で弱いインターネットについて不満を言っている)、無料で使用することにしましたライブラリ、彼は最終的にutfcpp.sourceforge.netに落ち着きました。



すぐに、Yegorはこのライブラリを取得できませんでした。 彼は私に発生したエラーを絶えず投げ捨て、私は何かを促しましたが、常に成功しませんでした...



それまでの間、Wikipedia: ru.wikipedia.org/wiki/UTF-8にアクセスして 、「Convert to UTF-8」という興味深いプレートを見つけました。









そして、クレイジーな考えが浮かびました:変換関数をUTF-8-> UTF-32で、その逆もライブラリなしでクリーンなコードで記述します!

私:成功したら何かを投げます

Egor:OK


面倒な操作は不要で、条件を確認するだけで、追加と操作は少しで完了し、40分で完了です!



私:なぜ必要なのですか? すべてをすばやく積み重ねて動作させるには: github.com/sitev/cjCore/blob/master/src/test_utf32to8.cpp

エゴール:そして戻って?

I:おそらく1週間で、C ++ 11およびBoostのエンコーディングを把握するのにかかった時間を覚えています


さらに30〜40分と逆変換が機能しました。



Egorはテストを開始し、しばらくしてからスクリーンショットを撮りました。





私:タイププラウ?

Egor:タイプではなく、プラウ:1行-ソース、2行-UTF-32、3行-UTF-32からUTF-8まで。


Egorのおかげで、彼は結果のコードを最適化し、Utfクラスの形式でそれをラップしました: github.com/sitev/cjCore/blob/master/src/utf.cppとEgorにパフォーマンスのテストを依頼しました。



結果はすぐに来ました。速度はutfcpp.sourceforge.netの 2〜2.5倍です。 残念ながら、他のライブラリと速度を比較する時間はありませんでしたが、自分で試して結果をコメントに投稿してください。



判明したように、Unicodeの往復コードプログラミングプロセスは非常にエキサイティングであり、燃えるような目と速いハートですばやく素早くキーをたたきます...



All Articles