選択文字をウェブに貼り付けたときの文字No.34944
柳絮 さん 16/04/08 18:20
 
いつもお世話になります。

秀丸上のテキストを選択してそのテキストをウェブ上の辞書に貼り付けるマクロを作
っているのですが、和文を選択し貼り付けると文字化けしてしまいます。これを解決
するにはどうしたらよいでしょうか。

補足説明をしますと、和文では文字化けするものの、英文では文字化けが生じません。
またグーグルで検索するときには同じようなマクロを作っていますがそこでは英文和
文とも文字化けしません。さらに手動でテキストを選択してからウエブに貼り付ける
ときにも問題は生じません。

つまり
ウェブ辞書検索で英文貼付○
ウェブ辞書検索で和文貼付×
グーグル検索で英文貼付○
グーグル検索で和文貼付○
という状態です。



マクロでの文字コードに関する部分は、ウェブ辞書検索でもグーグル検索でも次の
(1)のようにShift_JISとしているのですが、この文字指定が違っているのかと思
い、(2)のようにUTF-8を指定してみたのですが、やはり日本語を選択して貼り付
けると文字化けが生じてしまいます。なお秀丸自体の文字コード指定はUnicode(UTF-
8)になっています。

(1)
$param = "http://eowpf.alc.co.jp/search?q=" + $param + $and + "ie=Shift_JIS"
 + $and + "oe=Shift_JIS" + $and + "hl=ja"";

(2)
$param = "http://eowpf.alc.co.jp/search?q=" + $param + $and + "ie=UTF-8" + $
and + "oe=UTF-8" + $and + "hl=ja";

対処方法をお教えいただければ幸いです。

柳絮





[ ]
RE:34944 選択文字をウェブに貼り付けたとNo.34945
でるもんたいいじま さん 16/04/08 19:29
 
こんばんは、秀丸ユーザの「でるもんた・いいじま」です。

> 秀丸上のテキストを選択してそのテキストをウェブ上の辞書に
> 貼り付けるマクロを作っているのですが、和文を選択し貼り付けると
> 文字化けしてしまいます。

失礼ながら、根本的なこと、つまり、当該マクロがどういうメカニズムで
動くのか、中でどんなデータがどう渡されているのかを理解していないせいで、
遠回りをしておられるように思います。

この例の場合、

> (1)
> $param = "http://eowpf.alc.co.jp/search?q=" + $param + $and +
> "ie=Shift_JIS" + $and + "oe=Shift_JIS" + $and + "hl=ja"";

の ie= とか oe= とかはGoogleだけのローカルルールで、アルクさんには常に
非ASCII文字(という術語を使いこなせるようになってください)UTF-8で
渡さないとダメです。

それも、
http://eow.alc.co.jp/search?q=日本語
と書いてはダメです。
(私の場合はPro契約をしていないので上記のサーバになります。)

この場合、
http://eow.alc.co.jp/search?q=%E6%97%A5%E6%9C%AC%E8%AA%9E
と書かなければダメです。
この「%E6…」という部分の意味を正確に説明できますか?

おそらく、柳絮さんのマクロと、柳絮さんがデフォルトでお使いのブラウザの
組み合わせでは、たとえば上記の「日本語」というキーワードの場合は
http://eow.alc.co.jp/search?q=%93%FA%96%7B%8C%EA
というデータをサーバに送っていて、それで失敗しているはずです。
GoogleはデータをShift_JISで送ってもUTF-8で送ってもかなり高い精度で
自動判別してくれるので、問題が起きていないのです。

> これを解決するにはどうしたらよいでしょうか。

本気で取り組むならば、「日本語」という3文字から「%E6%97%A5%E6%9C%AC
%E8%AA%9E」という27文字の配列を自分で計算して、それをアルクのサーバに
渡すことになります。

これをやるのは今の柳絮さんにとってはかなりの骨なので、個人的には、
「何が何でもワンキーで操作できなければ困る理由」がなければ、簡単な
検索フォームだけのHTMLファイルを作って、Windowsのショートカットキー
機能で呼び出すことをお奨めします。

例えばこんな感じでどうでしょう。UTF-8で保存してください。

<html><head>
<meta http-equiv="Content-type" content="text/html;charset=utf-8">
</head><body onload="document.getElementById('q').focus()">
<form action="http://eow.alc.co.jp/search" method=GET
accept-charset="UTF-8">
キーワード:<input id=q name=q type=text size=30 value="">
<button type=submit>検索!</button>
</form></body></html>

[ ]
RE:34945 選択文字をウェブに貼り付けたとNo.34946
柳絮 さん 16/04/09 04:24
 
いいじま様

コメントを有難う御座いました。当方はマクロの「根本」の理解していないのかもし
れませんね。その専門家になるのではなく、自分の思ったことができればそれでよし
という立場です。

(1)さてそれで「日本語」という文字を「%E6%97%A5%E6%9C%AC%E8%AA%9E」に変換
することができれば良いというのであれば、それを手がかりに調べてみることにしま
す。ご示唆に感謝します。

(2)当方としては毎日何百回にもなる検索を簡略化することが目的なので、選択し
たらワンキーで貼り付けられるようにしたいのです。そのためAHKを併用してもいます。

ただ「簡単な検索フォームだけのHTMLファイルを作って、Windowsのショートカット
キー機能で呼び出す」というのは、私には力不足で理解できません。もう少し力をつ
けてからのことでしょうね。

いずれにしてもコメントをいただいたことに感謝します。

柳絮


[ ]
RE:34946 選択文字をウェブに貼り付けたとNo.34948
でるもんたいいじま さん 16/04/09 09:23
 
おはようございます、でるもんた・いいじまです。

> (2)当方としては毎日何百回にもなる検索を簡略化することが
> 目的なので、選択したらワンキーで貼り付けられるようにしたいのです。
> そのためAHKを併用してもいます。

何百回ですか。とすると、確かにワンキーでできると嬉しいですね。
AHK(AutoHotkey)も使うのは正解かもしれません。

> ただ「簡単な検索フォームだけのHTMLファイルを作って、
> Windowsのショートカットキー機能で呼び出す」というのは、
> 私には力不足で理解できません。

こちらはずっと簡単です。

1.まず、適当な場所に、昨夜の投稿に書いたHTMLを保存してください。
2.そのファイルを右クリックして「ショートカットの作成」を選択、
 ショートカットに名前をつけて確定します。
3.次はショートカットのほうを右クリックして「プロパティ」を選択。
 どこかのタブに「ショートカットキー:なし」という記述がある
 はずなので、ここで好きなキー、たとえばCtrl+Alt+Dを押して、
 それで「OK」。 
 「Ctrl+Alt+なんとか」と「Ctrl+Shift+なんとか」が使えるようです。
4.実際にそのキーを押してみて、起動することを確認。

あるいは、AHKが使えるなら、2.以降はWindowsではなくAHKにやらせる
こともできます。
常駐させているAHKスクリプトに、たとえば次のように書くだけです。

!d::Run "C:\Users\ryu-jo\Desktop\alc.html"

("..." の中身は1.で作ったHTMLファイルのフルパスに書き換えてください。)

ではでは。

[ ]
RE:34948 選択文字をウェブに貼り付けたとNo.34949
でるもんたいいじま さん 16/04/09 09:28
 
でるもんた・いいじまです。

細かいことですが、少し訂正。

> あるいは、AHKが使えるなら、2.以降はWindowsではなくAHKにやらせる
> こともできます。
> 常駐させているAHKスクリプトに、たとえば次のように書くだけです。
>
> !d::Run "C:\Users\ryu-jo\Desktop\alc.html"
> ("..." の中身は1.で作ったHTMLファイルのフルパスに書き換えてください。)

このキーは !d(Alt+d)よりは ^z(Ctrl+z)あたりのほうがよさそうですね。
キーボード化マウスで範囲指定する→Ctrl+cでクリップボードにコピーする
→Ctrl+zでHTMLファイルを呼び出す→Ctrl+vでペーストする→Enterで検索、
と、途中から左手の小指を動かさずに作業できます。

ではでは。

[ ]
RE:34945 選択文字をウェブに貼り付けたとNo.34950
でるもんたいいじま さん 16/04/09 10:37
 
でるもんた・いいじまです。
たびたびすみません。

<html><head>
<meta http-equiv="Content-type" content="text/html;charset=utf-8">
</head><body onload="document.getElementById('q').focus()">
<form action="http://eow.alc.co.jp/search" method=GET
accept-charset="UTF-8">
キーワード:<input id=q name=q type=text size=30 value="">
<button type=submit>検索!</button>
</form></body></html>

すみません、このHTMLをしっかりテストしていませんでした。
3行目の body タグに onload="..." がついていると、ブラウザによっては
警告を出します。次のいずれかの対策を取ってください。

1.<body onload="...">を単に<body>とする。
2.どこかのWebサーバの隠しページとしてこのHTMLをアップロードして、
 そのURLへのショートカットを作る。
3.警告を出さないブラウザを「標準のブラウザ」に設定してしまう。

ではでは。

[ ]
RE:34949 選択文字をウェブに貼り付けたとNo.34952
秀丸担当 さん 16/04/11 10:21
 

おそらくGoogle検索のマクロを改変したものだと思いますが、これはGoogle専用
にShift-JISで渡しているもので、他のサイトでは動作しないと思います。

「日本語」という文字を「%E6%97%A5%E6%9C%AC%E8%AA%9E」とするのは、いわゆ
るURLエンコードで、UTF-8でエンコードするということになると思います。

ちょうどマクロ作者様用の会議室でも似た話がありましたが、UTF-8でURLエン
コードするとしたら、Hidemarnet Explorer with FTPS をインストールしている
と簡単です。
秀丸エディタ自身でもできないことはないですが、少々面倒になります。

hmnetast.hmnetexというオブジェクトを作成して、URLEncodeというメソッドを
呼びます。
Google検索のマクロを元に改変した例では、以下のような感じになります。

if( selecting ) {
    $s = gettext(seltopx,seltopy,selendx,selendy);
} else {
    selectword;
    $s = gettext(seltopx,seltopy,selendx,selendy);
    $s = input( "辞書検索",  $s );
}
if( $s == "" ) {
    endmacro;
}

#obj = createobject("hmnetast.hmnetex");
if(#obj == 0){
  message "Hidemarnet Explorer がありません";
  endmacro;
}
$s = getpropstr(#obj, "URLEncode", $s,3); //3=UTF-8
releaseobject #obj;

#i = 0;
while( #i < strlen( $s ) ) {
  if(midstr($s,#i,1)=="%"){
    $s = midstr($s,0,#i)+"%"+midstr($s,#i,strlen( $s )-#i);
    #i = #i + 1;
  }
  #i = #i + 1;
}

$param = "http://eow.alc.co.jp/search?q=" + $s;
//または $param = "http://eowpf.alc.co.jp/search?q=" + $s;

run getenv("Comspec") + " /c start " + $param + " >nul";

endmacro;

[ ]