No.3ベストアンサー
- 回答日時:
(゜▽゜*)♪ニパッ
個人的なロジック公開しちゃう
バグあるかも?
Sub Main()
MsgBox convUrltoUni("%a4%db%a4%b2%a4%db%a4%b2+%a4%db%a4%cb%a4%e3%a4%e9%a4%e9%a1%c1")
End Sub
Public Function convUrltoUni(inVal As String)
Dim lngLen As Long '文字長
Dim lngFindPos As Long '%文字を見つけた位置
Dim lngStart As Long '検索開始位置
Dim strWk As String '文字列連結用ワーク
Dim blnHigh As Boolean '文字列が全角か半角によって切り替わるフラグ
Dim bytWk As Byte '「%**」の値
Dim bytHigh As Byte '全角文字の時の上位バイト
Dim bytLow As Byte '全角文字の時の下位バイト
Dim bytChar1 As Byte '変換ワーク上位
Dim bytChar2 As Byte '変換ワーク下位
Dim eucCrLf As Byte 'EUCの改行コード
'EUC改行コードを取得
eucCrLf = Asc(vbLf)
'文字長を得る
lngLen = Len(inVal)
'検索開始位置デフォルト
lngStart = 1
'上位バイトの処理を行ったことを記すフラグをおろす
blnHigh = False
Do
'%文字を見つける
lngFindPos = InStr(lngStart, inVal, "%")
'見つからなかったら、文字長+1をセット
If lngFindPos = 0 Then
lngFindPos = lngLen + 1
End If
'検索開始位置と「%」の発見位置が違うなら、半角文字が存在していることになる
If lngFindPos <> lngStart Then
'半角文字なので、そのままセット
strWk = strWk & Mid(inVal, lngStart, lngFindPos - lngStart)
blnHigh = False
End If
'「%」の発見位置が文字長を超えていたら抜ける
If lngFindPos >= lngLen Then
Exit Do
End If
'バイト値としてゲット
bytWk = CByte("&H" & (Mid(inVal, lngFindPos + 1, 2)))
'先に上位バイトの処理がなされていないなら
If Not blnHigh Then
'半角文字の時の処理
If bytWk < &H80 Then
'改行コードの処理
If bytWk = eucCrLf Then
strWk = strWk & vbCrLf
'改行コード以外の処理
Else
strWk = strWk + Chr(bytWk)
End If
'半角文字でないときの処理
Else
'下位バイトが必要なので、上位バイトとして値を記憶
bytHigh = bytWk - &H80
'変換準備上位(ここはお決まり変換ロジック)
If bytHigh < 95 Then
bytChar1 = 112
Else
bytChar1 = 176
End If
'上位バイトの処理を行ったことを記すフラグを立てる
blnHigh = True
End If
'すでに上位バイトの処理がされている時
Else
'上位バイトと組み合わせての変換処理(ここはお決まり変換ロジック)
bytLow = bytWk - &H80
If bytHigh Mod 2 = 1 Then
If bytLow > 95 Then
bytChar2 = 32
Else
bytChar2 = 31
End If
Else
bytChar2 = 126
End If
bytHigh = ((bytHigh + 1) \ 2) + bytChar1
bytLow = bytLow + bytChar2
strWk = strWk & Chr(CInt("&H" & Hex(bytHigh) & Hex(bytLow)))
'上位バイトの処理を行ったことを記すフラグをおろす
blnHigh = False
End If
lngStart = lngFindPos + 3
Loop
convUrltoUni = strWk
End Function
No.2
- 回答日時:
文字コードが分かっているのであれば、あとは自分が欲しい文字コードに変換するだけです。
文字コードの仕組みを解説したページを参考URLに記述しますので、読んでみてください。
記憶が正しければ、たしか変換方法も乗ってたと思ったんですが……。
参考URL:http://www.hosibune.net/~mak/technical/kanji.shtml
No.1
- 回答日時:
URL形式です。
デコードするには、まず「+」を「スペース」に置き換えます。
次に、%で始まる2文字を16進数と見なし、キャラクターコードに置き換えます。
その他の文字はそのままです。
ただし、エンコード前にどんな形式の文字列だったかという情報は、自動認識させるプログラムを書かないかぎり分かりません。
必ずしもシフトJISとは限らないので、変換してあげないといけない場合もあるのです。
今回の場合もシフトJISではなかったらしく、ただ変換しただけでは正しい文字列になりませんでした。
EUCで「ほげほげ ほにゃらら~」と書かれているようです。
この回答への補足
パターンから
%a4%db → 0xA4DB ⇒ EUCの「ほ」
のようだということは気が付きました。
→ の処理は何とかなりそうです。
⇒ の変換処理はサッパリ判りません。
EUCしか扱わないことを前提として、
&hA4DBから「ほ」を出力する方法を
アドバイス頂けますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
VB6.0 ヘキサの条件式
-
CString型 全角半角を意識せず...
-
一番右のスペース以降の文字列...
-
エクセルで13,410円を数値の134...
-
機種依存文字と特殊文字について
-
VB6のテキストボックスに入力し...
-
VBAでアクセスDBからデータの取...
-
VBA 変数名に変数を使用したい。
-
C# DataTableに最後に追加した...
-
ExcelVBAからAccessMDB内のテー...
-
エクセルでXY座標に並べられた...
-
COBOL 最新のデータを1件取得...
-
VBAコンボボックスの内容が反映...
-
配列の中の最大値とそのインデ...
-
INT64対応のprintf系関数はあり...
-
VBAで配列引数を値渡しできない...
-
★クリスタルレポートの元になる...
-
部品表
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
一番右のスペース以降の文字列...
-
ファイル名の一部削除について
-
StrConvでUnicodeに変換出来な...
-
CString型 全角半角を意識せず...
-
TextFieldParserの固定長桁数を...
-
文字列から、null値を除去する方法
-
アクセス ステータスバーの文...
-
機種依存文字と特殊文字について
-
VB6のテキストボックスに入力し...
-
マルチバイト混在の文字列整形
-
Access VBAの参照設定(DAO)につ...
-
エンコード・デコードの仕方
-
VBScriptで半角カナと半角英数...
-
WSTRINGとは?
-
「シフトJIS X 0213」形式の文...
-
VBからID3タグをいじる方法
-
C言語とWin32APIで全角かなの...
-
ワードのVBAで
-
VB.NET ListBox内の前方一致で...
おすすめ情報