EUCに変換する方法

タグの編集
投稿者 トマト  (小学生) 投稿日時 2009/5/16 03:38:39
こんにちは。
何度もすみません。

インターネット検索をする機能を作りたいのですが、
Yahoo! 検索を使うには「EUC」とか言う文字エンコードに変換する必要があるみたいです。
変換する方法を教えてください。

ついでにGoogleは、こんな感じでOKでした。


Dim WebBrowser1 As New WebBrowser
Private Sub GoogleSearch(ByVal Text As String)
    Dim text As String = Text
    WebBrowser1.Navigate("http://www.google.co.jp/search?hl=ja&q=" & text)
End Sub

変換しなくてもOKみたいです。
投稿者 (削除されました)  () 投稿日時 2009/5/16 04:20:06
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/5/16 04:32:16
> 変換しなくてもOKみたいです。
いいえ、それはたまたまうまく行っただけです。そのまま繋げてはいけません。

たとえば、「=」「&」などの文字が含まれていた場合、その方法では正しく
検索できなくなりますし、日本語の文字などを直接渡すと、文字コード判定に
失敗した場合に、別の文字とみなされてしまう事もあります。URL に渡す文字列は、
 Dim query As String = Uri.EscapeDataString(Text)
などとして事前に変換するようにしましょう。
これは、どのサイトの URL を指定する場合にも言えることです。


> Yahoo! 検索を使うには「EUC」とか言う文字エンコードに変換する必要があるみたいです。
EUC への変換には、System.Text.Encoding を利用する事ができます。

しかし、検索に文字コード変換が必ず必要か、というとそうでもありません。
Google や Yahoo! の検索用 URL には、文字コード指定用のパラメータが用意されているからです。
Dim url As String = "http://search.yahoo.co.jp/search?fr=yjdnqp&ei=UTF-8&p=" & query

Yahoo! の場合は ei がそれにあたります。各パラメータの意味については、下記で確認してください。
http://developer.yahoo.co.jp/other/query_parameters/search/websearch.html



この他、検索結果を直接データとして受け取るための API も用意されています。
興味があれば、これらの方法についても調べてみてください。

http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html
http://www.google.com/apis/
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/5/16 04:53:37
> この他、検索結果を直接データとして受け取るための API も用意されています。
> 興味があれば、これらの方法についても調べてみてください。
> http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html

Yahoo! 版のサンプルを掲載しておきます。(実行には、アプリケーションID が必要です)


'TextBox、DataGridView、Button を配置してください。 
Public Class Form1
    'ここには、取得した Yahoo! 用の アプリケーションIDを指定します。 
    Private Const AppID As String = ************
    Private BaseURL As String = "http://search.yahooapis.jp/WebSearchService/V1/webSearch?query={0}&appid=" & AppID

    Private Sub Button1_Click(ByVal sender As ObjectByVal e As EventArgs) Handles Button1.Click
        Dim ds As New DataSet()
        ds.ReadXml(String.Format(BaseURL, Uri.EscapeUriString(TextBox1.Text)))
        DataGridView1.DataSource = ds.Tables("Result")
    End Sub

    'Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 
    '    Dim c As New DataGridViewLinkColumn() 
    '    c.Name = "Url" 
    '    c.DataPropertyName = "Url" 
    '    DataGridView1.Columns.Add(c) 
    'End Sub 
End Class
投稿者 トマト  (小学生) 投稿日時 2009/5/17 18:18:43
ありがとうございます。

>いいえ、それはたまたまうまく行っただけです。
Googleでは、「sss」とか「あ」などで検索のテストをしていました。

さっそくテストしようと思ったら、エラー一覧に17のエラーが出ていたので、
修正してからテストしてみます。
投稿者 トマト  (小学生) 投稿日時 2009/5/17 19:27:37
ei=Shift_JIS に変えたらちゃんと動きました。

ありがとうございました。
投稿者 (削除されました)  () 投稿日時 2009/5/18 03:19:30
(削除されました)