「UCS-2」を含む日記 RSS

はてなキーワード: UCS-2とは

2017-05-30

BASP21で受信したメール添付ファイル名などが文字化けする問題対処ポイント

今時BASP21 DLLフリー版)でメール受信してどうのこうので困ってる人が世の中にどのくらいいるかどうかわからないけど、今日嵌ってググってもまともな答えが出てこなくて途方にくれたのでポイントメモっておく。

問題と原因

BASP21 DLLのRcvMailメソッドPOP3サーバから受信してReadMailメソッドメールの内容を取得すると、一部のメール送信者や添付ファイル名が文字化けして正常に取得できない。これはBASP21 DLLのReadMailメソッド最近普通に送信されるUTF-8メール対応していないため。

対処

RcvMailで受信したファイルをReadMailで読み込む前に直接開き、Base64エンコードされたUTF-8文字があったらデコードしてJISに変換してBase64エンコードして保存する。その処理したファイルをReadMailで取り扱うようにする。全部BASP21の機能でできる。

落とし穴

BASP21のKconvメソッドの第1引数のinstrに文字列を渡せるのはUnicode UCS-2のみの場合だけらしく、UTF-8文字列を渡しても正常に動作しない。なので、一旦テンポラリファイルに書き出しKconvFileメソッド使用して変換を行う必要がある。っていまドキュメント眺めてたら文字列バイト配列にするByteArrayというメソッドがあるみたいなのでこれをを使えばできるかもしれない。けどもう正直いじりたくないよ…。

2014-06-24

SQLSERVER テーブルのXML型の列へ XMLファイルから取り込む一例

  1. XML宣言のエンコーディングを "utf-16" にする
  2. BOMつきのUTF-16(Unicode)でファイル保存する
  3. 次のようなSQL文を流す

INSERT INTO TBL SELECT TBL.COL FROM OPENROWSET(BULK 'filepath', SINGLE_NCLOB) AS TBL(COL)

他の方法もいろいろあるだろう。ただ、文字コードに関して言及すると、SQL SERVER の内部データUCS-2UTF-16のサブセット)なので、合わせておいたほうが無難UTF-16以外で取り込もうとすると、日本語付近で "XML 文字が無効です" などとエラーになる場合が多い(もちろん原因は何かあるのだろうが、調べてもさっぱり私には見当がつかない。時間の浪費はいやずら)。

'filepath'は、SQL SERVERインスタンスが動いているマシンにとってのファイルパスね。'E:\???\???.xml'や'\\filesvr01\shared\data\???.xml'とか。

SELECT COL.query('/ELEM/NODE') FROM TBL など、あとはいろいろクエリーしてみてくれ。

感謝

 
ログイン ユーザー登録
ようこそ ゲスト さん