一応、VBAもあり。~ 「=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9」のような文字列(quoted-printable ?)や「%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB」ような文字列(URLエンコード、パーセントエンコード ?)を日本語に変換する方法
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
★エンコードデコードサンプルダウンロード
(base64エンコードとデコード、quoted-printableデコード、URL=パーセントデコード、Yahoo知恵袋インデント変換、のコードが入っています。)
Chromeなどで、Webページをmhtml形式のファイルとして保存した際、それをテキストエディタで開くと、
「=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9」や「%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB」ような文字列に化けて表示されるので、その際に、日本語に変換したい時に使います。
VCF形式(vCard?)のデータとか?の場合も。
====================================
https://dencode.com/ja/string/quoted-printable
にアクセス。
念のため、「文字列」タブの「▼」ドロップダウンにて、「Quoted-printable」が選ばれていることを確認。
そのすぐ下の「文字列入力のテキストボックス」に、
「=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9」のような文字列を貼り付ける。
そのテキストボックスのすぐ下の「UTF-8」から4つ目の右の文字コード名の「▼」ドロップダウンにて、「EUC-JP」を選ぶ。
すると、「デコード結果」のところに、
「支払い明細」などのように、日本語に変換されたものが表示されます。
逆に、「文字列入力のテキストボックス」に、
「支払い明細書」などと日本語を入れると、
「デコード結果」のところに、
「=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9=BD=F1=0D=0A」と、デコードされたものが表示される。
※「デコード結果」は入力した文字列によって、上下が入れ替わります。
=======================
「%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E3%83%80%E3%83%96%E3%83%AB%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E9%96%8B%E3%81%8F%E3%81%A8%0D%0A%0D%0A%0D%0A」のような「パーセントエンコーディング」がなされた文字列なら、
「文字列」タブの「▼」ドロップダウンにて、「URLエンコーディング」が選ばれていることを確認。
その下の「文字列入力のテキストボックス」のすぐ下の「UTF-8」のボタンを押すと、
「ファイル名をダブルクリックしてファイルを開くと」などのような日本語が出てきます。
あと、VBAでもできるらしいので、簡単な例を載せておきます。
ただ、僕が文字コードのことがわかってないので、コメントが正しくないかもしれません。
コメントに惑わされない様にご注意ください。すみません。。。
また、完璧かどうかもわかりません。
怪しいです。
すみません。
(以下のWebページにも「すべての文字が3バイトにパーセントエンコードされていた場合しか想定していません。」と注意書きがあります。)
以下のWebページを参考に、少し改変しただけのものです。
VBAでURLデコード
こちらも参考にしました。
vcfファイルからExcel VBAで住所録シートを作成する
イミディエイトウィンドウですと、
UTF-8でパーセントエンコードされたモノのデコードなら、
? PercentDecodeUTF_8("%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB")
EUC_JPでの「Quoted-printable」でのデコードなら、
? QuotedPrintableDecodeEUC_JP("=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9")
みたいにやると動きがわかります。
前者は「ファイル」、後者は「支払い明細」と出ます。
※★いちおう、レイトバインディング(遅延バインディング=実行時バインディング)兼用となっていまして、xls拡張子のファイルに書けばExcelの古いバージョンでも大丈夫です。
が、アーリーバインディング(事前バインディング)用のコードもかいてあります。コメントアウトしてありますので、VBAの独学をされている方は、学習のヒントなどにもしてみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 |
' ' Option Explicit '################################################################################ ' UTF-8でパーセントエンコードされた文字列をデコードします ' 以下、コメント間違ってる気がします。 ' 文字コードのことをよく分かってないので・・・。すみません。 ' '使い方 '? PercentDecodeUTF_8("%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB") ' ' @param percentEncodedStr UTF-8でパーセントエンコードされた文字列 ' 「%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB」のような文字列。 ' (↑この文字列は「ファイル」という日本語。) ' ' @return デコードした文字列 ' ' ※ADODB.Streamを利用するため、ツール > 参照設定で ' 「Microsoft ActiveX Data Objects 6.1 Library」を追加してください。 ' 6.1じゃなくても、2.8でもOK。(つまり、古いバージョンのExcelでも使えるです) ' 改行コードは「%0D%0A」 ' もしかしたら、「CR」が「%0D」で、「LF」が「%0A」なのかも? ' いずれも、「=0A」や「%0A」だけでも一応は改行される。 ' でも大事をとって、「CRLF」として改行するほうが無難かも? ' ちなみに、「CR」?の「%0D」だけの場合も、「VBAだと」(?)改行された(?)。 ' '? PercentDecodeUTF_8("%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB" & vbcrlf "%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB") ' とやるとエラーになるので、 '? PercentDecodeUTF_8("%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%0D%0A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB") ' という風に、「%0D%0A」でつなげてしまうと ' 「ファイル」 ' 「ファイル」 ' と2行に改行されて出てくる。 ' '################################################################################ Public Function PercentDecodeUTF_8(percentEncodedStr As String) As String ' 空文字なら空文字を返却 ' If IsEmpty(percentEncodedStr) Then ' PercentDecodeUTF_8 = "" ' Exit Function ' End If ' 空文字なら空文字を返却 If percentEncodedStr = "" Then PercentDecodeUTF_8 = "" Exit Function End If ' ストリームをオープン ' Dim objStm As ADODB.Stream 'アーリーバインディング専用(事前バインディング) ' Set objStm = New ADODB.Stream Dim objStm As Object 'レイトバインディング専用(実行時バインディング) Set objStm = CreateObject("ADODB.Stream") objStm.Open ' ストリームをリセット objStm.Position = 0 objStm.SetEOS ' バイナリを書き込み ' objStm.Type = ADODB.adTypeBinary 'アーリーバインディング専用(事前バインディング) objStm.Type = 1 'アーリーレイト兼用 objStm.Write ToHexBytes(percentEncodedStr) ' UTF-8でテキスト読み込み objStm.Position = 0 ' objStm.Type = ADODB.adTypeText 'アーリーバインディング専用(事前バインディング) objStm.Type = 2 'アーリーレイト兼用 objStm.Charset = "UTF-8" '↑「PercentDecode」や「QuotedPrintableDecodeEUC_JP」の内容とは、この1行が異なるだけ。 ' objStm.Charset = "EUC-JP" PercentDecodeUTF_8 = objStm.ReadText() ' 結果返却 ' ストリームをクローズ objStm.Close Set objStm = Nothing End Function '################################################################################ ' EUC-JPで「Quoted-printable」でエンコードされた文字列をデコードします ' 以下、コメント間違ってる気がします。 ' 文字コードのことをよく分かってないので・・・。すみません。 ' '使い方 '? PercentDecode("=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9") ' ' @param percentEncodedStr EUC-JPでパーセントエンコードされた文字列 ' 「=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9」のような文字列です。 ' (↑この文字列は「支払い明細」という日本語。) ' ' @return デコードした文字列 ' ' ※ADODB.Streamを利用するため、ツール > 参照設定で ' 「Microsoft ActiveX Data Objects 6.1 Library」を追加してください。 ' '################################################################################ Public Function PercentDecode(percentEncodedStr As String) As String ' 空文字なら空文字を返却 ' If IsEmpty(percentEncodedStr) Then ' PercentDecode = "" ' Exit Function ' End If If percentEncodedStr = "" Then PercentDecode = "" Exit Function End If ' ストリームをオープン ' Dim objStm As ADODB.Stream 'アーリーバインディング専用(事前バインディング) ' Set objStm = New ADODB.Stream Dim objStm As Object 'レイトバインディング専用(実行時バインディング) Set objStm = CreateObject("ADODB.Stream") objStm.Open ' ストリームをリセット objStm.Position = 0 objStm.SetEOS ' バイナリを書き込み ' objStm.Type = ADODB.adTypeBinary 'アーリーバインディング専用(事前バインディング) objStm.Type = 1 'アーリーレイト兼用 objStm.Write ToHexBytes(percentEncodedStr) Dim aaaa As Object Set aaaa = CreateObject("ADODB.Connection") ' UTF-8でテキスト読み込み objStm.Position = 0 ' objStm.Type = ADODB.adTypeText 'アーリーバインディング専用(事前バインディング) objStm.Type = 2 'アーリーレイト兼用 ' objStm.Charset = "UTF-8" '↑「PercentDecode」や「QuotedPrintableDecodeEUC_JP」の内容とは、この1行が異なるだけ。 objStm.Charset = "EUC-JP" PercentDecode = objStm.ReadText() ' 結果返却 ' ストリームをクローズ objStm.Close Set objStm = Nothing End Function '################################################################################ ' 以下、コメント間違ってる気がします。 ' 文字コードのことをよく分かってないので・・・。すみません。 ' ' UTF-8でパーセントエンコードされたり、 ' EUC-JPで「Quoted-printable」でエンコードされた文字列をバイト配列に変換します。 ' ' ※★★★ 他の3つの関数から呼び出される、「共用部品」です。★★★ ' ' ' UTF-8でパーセントエンコードされた文字列の例 '「%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB」 ' ' EUC-JPで「Quoted-printable」でエンコードされた文字列の例 '「=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9」 ' ' @param percentEncodedStr UTF-8でパーセントエンコードされた文字列 ' @return バイト配列 ' '################################################################################ Public Function ToHexBytes(percentEncodedStr As String) As Byte() Dim size As Long size = Len(percentEncodedStr) / 3 Dim bytes() As Byte ReDim bytes(0 To size - 1) Dim i As Long For i = 0 To size - 1 bytes(i) = Val("&H" & Mid(percentEncodedStr, (i * 3) + 2, 2)) Next i 'Stop ’デバッグ用 ToHexBytes = bytes End Function '################################################################################ ' ★★★「PercentDecode()」関数とまったく同じ内容。 ' テスト用に違う名前のものを作っただけ。 ' →ただし、結局「名前による使い分け」からこっちがメインになった。 ' ' EUC-JPで「Quoted-printable」でエンコードされた文字列をデコードします ' 以下、コメント間違ってる気がします。 ' 文字コードのことをよく分かってないので・・・。すみません。 ' '使い方 '? QuotedPrintableDecodeEUC_JP("=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9") ' ' @param percentEncodedStr EUC-JPでパーセントエンコードされた文字列 ' 「=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9」のような文字列です。 ' (↑この文字列は「支払い明細」という日本語。) ' ' @return デコードした文字列 ' ' ※アーリーバインディング(事前バインディング)したい場合は、 ' ADODB.Streamを利用するため、ツール > 参照設定で ' 「Microsoft ActiveX Data Objects 6.1 Library」を追加してください。' ' 6.1じゃなくても、2.8でもOK。(つまり、古いバージョンのExcelでも使えるです) ' レイトバインディング(実行時バインディング)したい場合は、何もしなくてOKです。 ' 今現在は、'レイトバインディング(実行時バインディング)になっていますので、 ' 何もしなくても、古いExcelでも最新のExcelでも両方で使える状態になっています。 ' ' 改行コードは「CR」が「=0D」で、「LF」が「=0A」で、「CRLF」が「=0D=0A」 ' パーセントエンコードと似てる。 ' パーセントエンコードももしかしたら、 ' 「CR」が「%0D」で、「LF」が「%0A」なのかも? ' いずれも、「=0A」や「%0A」だけでも一応は改行される。 ' でも大事をとって、「CRLF」として改行するほうが無難かも? ' ちなみに、「CR」の「=0D」だけの場合も、「VBAだと」(?)こちらも改行される(?)。 ' '? QuotedPrintableDecodeEUC_JP("=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9" & vbcrlf "=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9") ' とやるとエラーになるので、 '? QuotedPrintableDecodeEUC_JP("=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9=0D=0A=BB=D9=CA=A7=A4=A4=CC=C0=BA=D9") ' という風に、「=0D=0A」でつなげてしまうと ' 「支払い明細」 ' 「支払い明細」 ' と2行に改行されて出てくる。 '################################################################################ Public Function QuotedPrintableDecodeEUC_JP(percentEncodedStr As String) As String ' 空文字なら空文字を返却 ' If IsEmpty(percentEncodedStr) Then ' PercentDecode = "" ' Exit Function ' End If If percentEncodedStr = "" Then QuotedPrintableDecodeEUC_JP = "" Exit Function End If ' ストリームをオープン ' Dim objStm As ADODB.Stream 'アーリーバインディング専用(事前バインディング) ' Set objStm = New ADODB.Stream Dim objStm As Object 'レイトバインディング専用(実行時バインディング) Set objStm = CreateObject("ADODB.Stream") objStm.Open ' ストリームをリセット objStm.Position = 0 objStm.SetEOS ' バイナリを書き込み ' objStm.Type = ADODB.adTypeBinary 'アーリーバインディング専用(事前バインディング) objStm.Type = 1 'アーリーレイト兼用 objStm.Write ToHexBytes(percentEncodedStr) ' UTF-8でテキスト読み込み objStm.Position = 0 ' objStm.Type = ADODB.adTypeText 'アーリーバインディング専用(事前バインディング) objStm.Type = 2 'アーリーレイト兼用 ' objStm.Charset = "UTF-8" '↑「PercentDecode」や「QuotedPrintableDecodeEUC_JP」の内容とは、この1行が異なるだけ。 objStm.Charset = "EUC-JP" QuotedPrintableDecodeEUC_JP = objStm.ReadText() ' 結果返却 ' ストリームをクローズ objStm.Close Set objStm = Nothing End Function ' ' |
- 投稿タグ
- エンコード, デコード, ビジネスパソコンの基礎, ビジネス一般常識, フリーウェア