はじめまして。
いつも参考にさせて頂いています。
質問させてください。
VB6.0で簡単なファイル操作をしています。
①CSVファイルを行毎に読み込みます。(Openを使用しています)
②新規CSVファイルを作成します。(Open 〜 Outputを使用しています)
③ ①で読み込んだ不要な行以外のデータを②で作成したCSVファイルに書き込みます。
④ ③が終了した後、DF等のツールを使用し、元のファイルと、書き込んだファイルの差分を確認した結果、"Ⅰ"、"Ⅱ"、"Ⅲ"等のギリシャ数字のみ異なると表示されました。
これは、どのようなことが原因でしょうか?
また、解決方法がありましたらよろしくお願い致します。
> ギリシャ数字
それは「ローマ数字」です…。(^_^;)
ギリシャ数字はこっち。
http://mkatz.web.wesleyan.edu/grk202/vocabulary/greek_numerals.html
> のみ異なると表示されました。
たとえば、「II」を表すコードは、Shift_JIS(というか Windows-31J)にて、
Chr(&HFA4B) と Chr(&H8755) の 2箇所にマッピングされているのです。
ところが Unicode では、そうした曖昧さを減らすため、その文字が
ChrW(&H2161) のみで定義されています。
そして、この一対多となる関係ゆえに、VB の String型(内部的にはUnicode)を
経由させた場合、復元時にコードが変化してしまう……という状況が起きます。
関連情報として、下記をご覧下さい。
http://support.microsoft.com/kb/170559/ja
>> ギリシャ数字
> それは「ローマ数字」です…。(^_^;)
こっちの方がわかりやすいかな。
http://www.s-ivy.jp/letter_numeral.html
で、本題の件に関しては、文字セットの仕様上どうにもならないので、
案1) 文字列ではなく、バイナリデータとして処理する。
案2) 結果の内容比較は、バイナリ比較ではなくテキスト比較で行う。
案3) マッピングが重複する文字は、一方のコードに統一させる。
などの手法で回避する事を検討してください。
# 案1はプログラム側の対処、案2は運用での対処という事で。
魔界の仮面弁士様
お返事ありがとうございます。
>>> ギリシャ数字
>> それは「ローマ数字」です…。(^_^;)
>こっちの方がわかりやすいかな。
すみません、初歩的な間違いを・・・
で、本題の方に入ります。
文字セットに関しましては、VBではどうにもならなそうですので、
頂いた、案2)を試します。
本当にありがとうございました。
ツイート | ![]() |