2009年11月06日

VBAでUnicodeEscapeSeaquenceをデコード

さて、先日、ニコニコ動画が、(9)に変わりまして、マイリストの仕様がかなり変わりました。

週間ボカランのマイリストから、「ボカランを再ランキング」コンテンツを作っている私としては結構死活問題です。

ちなみに、再ランキングを動かしているスクリプトの環境は。

WindowsXP + Excel2000という数世代前の環境ですw
んでVBA(マクロ)でがっしがっし動くように作っていたんです。

話は戻りまして。
今まで、マイリストは今までHTMLで構成されていたんですが、今度からはJavaScript(Ajax)となってしまいまして。
データ形式が大幅に変更となりました。

ってことで、抽出スクリプトをガシガシ変えていたんですが。
でかい壁にぶち当たりました。

Unicode Escape Sequence(ユニコードエスケープシーケンス)

2バイト文字が総じて、「\u521d\u97f3\u30df\u30af」こんな感じにエンコードされているわけです。
こいつをデコードしなくちゃ日本語として表示できないわけでして。

こりゃやべぇと。
あちこちのサイトとか巡ったわけです。
んで、やっとこさ自分の納得できる関数ができあがりました。
バグ取りとかなーんもしてないので、何か問題起きてもしらんですが、とりあえず私の環境ではまともに動いているようなので、スクリプト晒します。

何の役に立つかは解りませんがwww




''--------------------------------------------------------
'' \u521d\u97f3\u30df\u30af こんなふうに
'' Unicode Escape Sequence(ユニコードエスケープシーケンス)
'' されている文字を変換するVBAスクリプト(XP-Excel2000動作確認済)
'' 引数に\u521d\u97f3\u30df\u30afとなっている文字をぶち込んで下さい
''
'' 使ったことで何か起きても責任は持ちませんので、自己責任でよろしくです。
'' (趣味用で適当に組んだのでバグがあるかもwww)
''---------------------------------------------------------
Private Function Henkan(ByVal strTemp As String) As String
On Error GoTo Err_Henkan:
Henkan = ""

Dim INT_BYTE As Integer
''INT_BYTEは、\uの後数値何文字あるか。
''一応定義しておく定数。大概4だと思うけど。
INT_BYTE = 4

Dim i As Integer
Dim flgUnicode As Boolean

''初期値設定
flgUnicode = False

''文字数分ループ
For i = 1 To Len(strTemp)
''Unicodeフラグがたっていなくて、"\"がきたら
If (flgUnicode = False) And (Mid(strTemp, i, 1) = "\") Then
i = i + 1
''ひとつ文字を進めて次がUで、\u ユニコードエスケープシーケンスだったら。
If Mid(strTemp, i, 1) = "u" Then
i = i + 1
flgUnicode = True
Else
i = i - 1
flgUnicode = False
End If
End If

''Unicodeフラグがたっていたら
If flgUnicode Then
''4バイト分切り出して16進変換してChrWで文字変換
''INT_BYTEは、一応定義しておく定数。大概4だと思うけど。
Henkan = Henkan & ChrW("&H" & Mid(strTemp, i, INT_BYTE))
i = i + 3
''フラグ戻しておく
flgUnicode = False
Else
''ただの半角文字だったら
Henkan = Henkan & Mid(strTemp, i, 1)
End If
Next i

Exit Function
Err_Henkan:
Henkan = "残念ですがエラーが発生しました。"
End Function


ま、こんな感じっす。
ご使用はあくまで自己責任でお願いします。
何か起きても私は一切責任を取れませんのであしからず。

人気ブログランキングへ
posted by Fuchs at 20:32 | Comment(0) | TrackBack(0) | プログラミング
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/33469699
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック

人気ブログランキングへ