07-31-2006 09:42 AM
08-09-2006 07:08 AM
どのようにして16進表示の文字列を標準表示の文字列で同様に表示させるか?
08-09-2006 08:35 AM
たびたび恐縮です。
HP4145A様がおっしゃっているのは、テスト装置から送られてくる文字列に含まれる漢字が、昔ながらのJISコードであり、そのままLabVIEWに取り込むと、LabVIEWはWindows上のアプリのためShiftJISである必要があるので化けて見えてしまうため、テスト装置から送られてくるJISコード漢字を、LabVIEW(Windows)でも見えるShiftJISコード漢字に変換したい、という意味かと思ったのですが、そういう意味で良いでしょうか?
インターネット上でいろいろ検索すると変換の基本方法が得られたりしますのでそれをもとに書いてみると、1バイトASCII文字&漢字IN/OUTのESCコード&JISコード2バイト漢字が混在する文字列に対して、JISコード漢字部分をShiftJISコード漢字に変換してLabVIEW(Windows)でも読めるようにするviは、添付のようになるかと思います。
テスト装置から送られてくる漢字コードの前後に付与される漢字IN/OUTのESCコードがこれと同じ形式かどうか良く分からないので、ちゃんと変換できるか不明ですが、JISコードの一般的な漢字IN/OUTのESCコードが入っていれば概ね大丈夫かと。
(例によって、上記のような意味でなかったら、すみません・・・)
08-10-2006 03:53 AM
08-10-2006 06:45 PM
意図が思ったようなことで、良かったです。
漢字コード変換ですが、一般に漢字コード変換というと、2つのポイントがあります。①漢字を表す2バイトコードを、コード体系間で変換(演算)。②漢字と1バイト文字が混在している文字列で1つ1つ漢字かどうかを判別しながら処理(解釈)。先日のviは、この2つをそれぞれのviに分離して書いた形になります。
(さらに高度だと、③何のコード体系か分からない文字列を使われているコードからコード体系を判別、というものもあります)
****
①については、幸い、漢字の並びはコード体系間で基本的に同じなので、コード体系ごとに使う1バイト目・2バイト目の範囲内でどんな規則でどう並び直しているか、だけになります。例えばJISコードなら1バイト目は21H~74H、2バイト目は21H~7EHで、この範囲に漢字が並べられています。ShiftJISなら、1バイト目は81H~9FHとE0H~FCH、2バイト目は40H~FCHの範囲に並べられています。従って、1バイト目と2バイト目を適当に演算すれば、コード間の変換は容易です(もともと変換は規則的)。Webでは「JIS SJIS 変換」という3つのキーワードで結構たくさんヒットします。見た目の変換方法は少しずつ違いますが、やっている中身と結果は同じです。コード体系の範囲外チェックはありません。
http://homepage2.nifty.com/DSS/WinSys/JISSJIS.htm
http://www.beta.or.jp/~oouchi/code/
http://i16.jp/soft/convsjis.htm
などがありました。(最後のものは相当短くて美しいですが創意工夫があり著作権放棄していないと明記しているので今回のviでは採用しなかった)
②は、文字列中の漢字と1バイト文字の境目がどうなっているかを知る必要があります。上記3サイトはコード変換のみで、これには触れていません。JISコードでは、漢字で使うコード範囲が普通の1バイト文字と重複しているため、別途「ここから漢字」「ここから1バイト文字」を表す符丁が必要です。これがESC(1BH)で始まるエスケープシーケンスで、規格により何通りかあるので、先日のviではどれが出現しても良いようにしています。ShiftJISでは、漢字の1バイト目は、普通の1バイト文字(ANK文字)とは重複せず、これが出ればその文字と次のバイトとで漢字1文字と分かるので、エスケープシーケンスはありません。ということで、JIS→ShiftJISは、エスケープシーケンスの出現に注意しながら「今漢字モード?」のフラグを使い、漢字モードなら①のコード変換を使って2バイトずつ演算で変換し、1バイト文字モードならそのまま残し、エスケープシーケンスなら内容によってフラグを切り替える、ということを繰り返しながら文字を次々と処理していきます。
なお、先日のviでは、エスケープシーケンスが漢字IN/OUT以外だったとき、エスケープシーケンスが無くなってしまうので、漢字IN/OUT以外のエスケープシーケンスはそのまま残すのが正しかったと後で思いました。。
エスケープシーケンスもいくつかのサイトにありますが、これと、コード体系ごとに漢字が使うコード範囲を記してある分かりやすいものは、
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html
などがあります。
****
ただし、いずれも漢字コードに関するオフィシャルなものでなく個人サイトに近いので、あくまで御参考ということで(本来は、ちゃんと規格で定められているから、その「おおもと」を見るのが正しいし、複数の方法で結果が一致することを予め確認したほうが良いです)。
以上、御参考になれば・・・
08-11-2006 07:35 AM
08-11-2006 11:27 AM
白石様
丁寧に解説までして頂き、ありがとうございます。特に、最後に添付頂いたサイトは判り易いように感じられます。盆休みのため、暫く頂いたサンプルviを見ることができませんが、頂いたサイトの資料にて変換ルールの概要を把握した上で、viの処理内容を追いかけていこうと考えております。データの処理は、色々と面倒で不慣れなことも多いのですが、Labviewを使っていく上では、その過程で得られたことが後々役立つことも多く、アドバイス頂いた内容も非常に役立っております。