C 文字列操作 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(文字列文字コード変換)
(文字列文字コード変換)
2,620行: 2,620行:
 
*ビルドの手順
 
*ビルドの手順
 
:1.[icu配置パス]\icu\source\allinone\allinone.sln を開く(プロジェクト変換ダイアログ表示されたらOKで変換する)
 
:1.[icu配置パス]\icu\source\allinone\allinone.sln を開く(プロジェクト変換ダイアログ表示されたらOKで変換する)
 +
::注)icu配置パスを決めてからビルドをしないと駄目です。ビルド時に生成されるファイルで絶対パスで管理されるDATAがあるため、ビルド後に移動させると動かなくなります。
 
:2.メニューの[ビルド]-[バッチビルド]を選択し、表示されたダイアログで、[すべてを選択]→[ビルド]で、ひたすら待つ。おそらく15分(Corei7 3610QM 3.3GHz)くらい
 
:2.メニューの[ビルド]-[バッチビルド]を選択し、表示されたダイアログで、[すべてを選択]→[ビルド]で、ひたすら待つ。おそらく15分(Corei7 3610QM 3.3GHz)くらい
 
:3.コマンドプロンプトでテストプログラムを動かす。テストコマンドの引数4種類全部確かめるなら以下4つのコマンド全部実行。それか自分の目的のテストだけ実施。あるいはテストはやらないのもひとつの選択肢。
 
:3.コマンドプロンプトでテストプログラムを動かす。テストコマンドの引数4種類全部確かめるなら以下4つのコマンド全部実行。それか自分の目的のテストだけ実施。あるいはテストはやらないのもひとつの選択肢。
2,633行: 2,634行:
 
以下、テスト時のエラーログです。ひょっとしたら自分だけなのかもしれませんが、既知のバグみたいな?いやテストだけで出るエラーみたいな感じなので気にしないことにします。え?ホントにそれでいいのか?調べるのも面倒だし、放置。
 
以下、テスト時のエラーログです。ひょっとしたら自分だけなのかもしれませんが、既知のバグみたいな?いやテストだけで出るエラーみたいな感じなので気にしないことにします。え?ホントにそれでいいのか?調べるのも面倒だし、放置。
 
<syntaxhighlight lang="text">
 
<syntaxhighlight lang="text">
KNOWN ISSUES
 
#10774 <http://bugs.icu-project.org/trac/ticket/10774>
 
  /CollationAPITest/TestGetAll/TestGetAll
 
    "Side effects from utility/LocaleTest/TestGetLocale"
 
#11020 <http://bugs.icu-project.org/trac/ticket/11020>
 
  /NumberFormatSpecificationTest/TestScientificNotation/TestScientificNotation
 
#11025 <http://bugs.icu-project.org/trac/ticket/11025>
 
  /NumberFormatSpecificationTest/TestPadding/TestPadding
 
#11052 <http://bugs.icu-project.org/trac/ticket/11052>
 
  /TimeZoneFormatTest/TestTimeRoundTrip/TestTimeRoundTrip
 
    "Ambiguous zone name - Samoa Time"
 
#7270 <http://bugs.icu-project.org/trac/ticket/7270>
 
  /RBBITest/TestUnicodeFiles/TestUnicodeFiles
 
#9503 <http://bugs.icu-project.org/trac/ticket/9503>
 
  /TestEnglishSpellout/TestEnglishSpellout
 
#cldrbug:1911 <http://unicode.org/cldr/trac/ticket/1911>
 
  /TransliteratorRoundTripTest/TestDevanagariLatin/TestDevanagariLatin
 
  /TransliteratorRoundTripTest/TestGreek/TestGreek
 
  /TransliteratorRoundTripTest/TestGreekUNGEGN/TestGreekUNGEGN
 
  /TransliteratorRoundTripTest/TestHebrew/TestHebrew
 
  /TransliteratorRoundTripTest/TestInterIndic/TestInterIndic
 
  /TransliteratorRoundTripTest/Testel/Testel
 
#cldrbug:6745 <http://unicode.org/cldr/trac/ticket/6745>
 
  /UCAConformanceTest/TestRulesNonIgnorable/TestRulesNonIgnorable
 
    "UCARules.txt has problems"
 
To run suppressed tests, use the -K option.
 
Errors in total: 15.
 
        TestToUnicode
 
      convert
 
        DetectionTest
 
      csdet
 
 
 
 
KNOWN ISSUES
 
KNOWN ISSUES
 
#11217 <http://bugs.icu-project.org/trac/ticket/11217>
 
#11217 <http://bugs.icu-project.org/trac/ticket/11217>
2,692行: 2,660行:
  
 
あらゆる文字コードの変換だけでなく、大文字小文字相互変換、全角半角相互変換、ひらがなカタカナ相互変換、他にもひらがなやカタカナからのローマ字相互変換といった複雑な変換も提供しています。そのほかにも通貨フォーマットや時間表記変換といった面白い変換も組み込まれています。ここでは文字コード変換のみを取り上げます。文字コードをファイルに出力するのはもっとあとで説明する予定なので、ここでは、サンプルとなる文字列をその文字コード体系に合わせて16進数で表現した配列として扱い、それを基に変換後の文字コード配列が生成されるのを確かめます。変換後の文字コードがUNICODEやShiftJIS以外になる場合も同じく16進数で表現される配列で示します、逆に異なる文字コードから基に戻す変換も確認します。
 
あらゆる文字コードの変換だけでなく、大文字小文字相互変換、全角半角相互変換、ひらがなカタカナ相互変換、他にもひらがなやカタカナからのローマ字相互変換といった複雑な変換も提供しています。そのほかにも通貨フォーマットや時間表記変換といった面白い変換も組み込まれています。ここでは文字コード変換のみを取り上げます。文字コードをファイルに出力するのはもっとあとで説明する予定なので、ここでは、サンプルとなる文字列をその文字コード体系に合わせて16進数で表現した配列として扱い、それを基に変換後の文字コード配列が生成されるのを確かめます。変換後の文字コードがUNICODEやShiftJIS以外になる場合も同じく16進数で表現される配列で示します、逆に異なる文字コードから基に戻す変換も確認します。
 +
 +
 +
*プロジェクトの設定
 +
:1.Win32プロジェクトなら[icu配置パス]\icu\bin、x64プロジェクトなら[icu配置パス]\icu\bin64という絶対パスを、プロジェクト毎にプロジェクトの設定の中(ALT+F7キーで表示されるダイアログの構成プロパティの中)にあるVCディレクトリの実行可能ファイルディレクトリにパスを設定する。Win32プロジェクトとx54プロジェクトとでパスは異なるためプロジェクト毎に毎回設定した方が良いでしょう。文字コード変換を必要とするプロジェクトを作成する都度、設定しましょう。面倒な人でWin32プロジェクトしか作らないX54しか作らないという人は、どちらかの環境変数PATHに入れてもいいでしょう。でも結局、この次にlibファイルやincludeファイルの設定もしないといけないし、やっぱりプロジェクト毎に設定しましょう。一見、面倒そうだけど、そんなにたくさんプロジェクト作る人ってあんまりいないと思います。小さなサンプルコードプロジェクトをたくさん作って、それで変換テストしまくる人は大変かもしれませんね。自分は基本Win32のプロジェクトで遊んでるので、環境変数PATHにWin32プロジェクト用の実行パスを登録しています。X64をビルドするときに、また切り替えます。このとき、新しいパス変数を作ってPATH32=[icu配置パス]\icu\bin;(他のSDKの実行パス);…;…でPATH64=[icu配置パス]\icu\bin64;(他のSDKの実行パス);…;…として、環境変数PATHにはPATH=(既存パス1);(既存パス2);%PATH32%;(既存パスn)みたいに登録するといろいろなSDKをまとめて切り替えられます。64に変えればいいんだもんね。
 +
:2.Win32プロジェクトなら[icu配置パス]\icu\lib、x64プロジェクトなら[icu配置パス]\icu\lib64という絶対パスをプロジェクト毎にプロジェクトの設定の中にあるVCディレクトリのライブラリディレクトリにパスを設定する。これも実行パス同様に管理して環境変数LIB32とLIB64を作って、環境変数LIB=%LIB32%とかにすると、プロジェクトの設定にはライブラリの欄に$(LIB)と入力するだけでよくなります。
 +
:3.Win32,x64共通ですが、[icu配置パス]\icu\includeをプロジェクト毎にプロジェクトの設定の中にあるVCディレクトリのインクルードディレクトリに設定します。自分はこれも環境変数INCLUDEを作っていて、$(INCLUDE)と設定しています。
 +
:4.デバッグプロジェクトならicuucd.lib、リリースプロジェクトならicuuc.libという追加するべきライブラリ名をプロジェクト毎にプロジェクトの設定の中にあるリンカー-入力の追加の依存ファイル欄に追記します。
 +
 +
 +
このICUはC++/CLIプロジェクトのような/clrオプションコンパイルには対応していません。UConverterという構造体が実態が未定義のまま利用されていますが、このような宣言がされているだけのものをビルドするとリンカーエラーが発生し、プログラムは動作しません。対処方法はあると思いますが、ICUはとてつもなく大きなプロジェクトファイルです。C++/CLIで使っていくには、現在のバージョンを永続的に使っていくのか?メンテしきれるか?どうかも含めた検討が必要になります。
 +
 +
 +
プロジェクトの設定は以上です。以下が実際の変換サンプルになります。これまでのサンプルもそうですが、実際にはサポートクラスを作って、毎回新しく変数定義しているものは、クラスを呼ぶたびにまとめて生成されるようなセットを作るべきです。変換サポートクラスの作り方については、クラスに関する記述を掘り下げるセクションで触れたいと思いますが、ここでは例のごとく直線的なプログラムになっています。
  
 
=='''文字列大文字小文字変換'''==
 
=='''文字列大文字小文字変換'''==

2014年9月29日 (月) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス