質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

Go IDE@Windows7 での文字化け

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,329

score 12

64bit Win7 LiteIDEにてGoを書いています。
スクレイピングのコードを書いていて困っています。

①goquery.NewDocumentで直接開く
doc, err := goquery.NewDocument(url)
⇒Build&Runの結果、日本語出力が文字化け

②http.NewRequestを挟んでHeaderをセットする
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 
Safari/601.1")
client := new(http.Client)
resp, _ := client.Do(req)
doc, err = goquery.NewDocumentFromResponse(resp)

⇒文字化けしないのですが、doc.Find("")CSSセレクタの挙動が変
ちなみにHeaderセットしないと文字化けします…
※HeaderもUserAgentが変わるとやっぱり文字化けします。。

LiteIDEだと駄目なのかと思ってAtomでも試したのですが、同じ結果でした。
①の方法で、Build&RunのIDEでの出力結果が日本語になってくれれば一番うれしいのですが…
ちなみに、csvファイル出力して、sakuraエディタで表示するとちゃんとutf-8で見えます。

少しでも何かご存知の方、よろしくお願いいたします!

package main

import (
    "fmt"
    "net/http"

    "github.com/PuerkitoBio/goquery"
)

func main() {
    url := "https://www.google.co.jp/search?q=%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3&oq=%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3&aqs=chrome..69i57j0l5.7015j0j7&sourceid=chrome&ie=UTF-8"
    doc, err := goquery.NewDocument(url)
    if err != nil {
        fmt.Println(err.Error())
    }
    // search
    doc.Find("a").Each(func(i int, s *goquery.Selection) {
        fmt.Printf(s.Text())
                //日本語は文字化けします
    })
package main

import (
    "fmt"
    "net/http"

    "github.com/PuerkitoBio/goquery"
)

func main() {
    url := "https://www.google.co.jp/search?q=%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3&oq=%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3&aqs=chrome..69i57j0l5.7015j0j7&sourceid=chrome&ie=UTF-8"
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Add("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1")
    client := new(http.Client)
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    doc, err = goquery.NewDocumentFromResponse(resp)
    if err != nil {
        panic(err)
    }

    selection := doc.Find("a")
    selection.Each(func(index int, s *goquery.Selection) {
        fmt.Printf("Title: %s \n", s.Text())
                //結果がゼロ件になります
    })
    //println(selection.Text())

    //defer doc.Body.Close()
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • nobonobo

    2018/11/08 11:58

    なるほど。sakuraエディタは自動エンコード検出機能があったかと。おそらく取得したコンテンツはUTF-8ではない上にLiteIDEはUTF-8を期待してるので文字化けするというわけです。コンテンツがどんなエンコードなのかを知り、そのエンコードに合わせたデコードをしてあげる必要があると思います。ちなみにnkfというツールは不明なテキストを自動判別してUTF-8への変換機能があります。詳しくはnkfの使い方を調べましょう。僕の提示したURLの場合はShiftJISのコンテンツを返します。

    キャンセル

  • nobonobo

    2018/11/08 12:01

    Goで解決するには golang.org/x/text/encoding/japanese というパッケージの使い方を調べてみましょう。

    キャンセル

  • hachico

    2018/11/12 10:38

    調べてみたら仰るとおり,取得コンテンツがutf-8の場合は大丈夫でした!Sjisページは教えて頂いた「 golang.org/x/text/encoding/japanese」パッケージで変換をかけて解決できました。ありがとうございました!!ぜひBAを差し上げたいのですが、どうすればよいでしょうか…

    キャンセル

回答 2

checkベストアンサー

+1

おそらくUTF-8でないコンテンツを参照しようとしているので、
Goで解決するには golang.org/x/text/encoding/japanese というパッケージの使い方を調べてみましょう。
(実際に動いたコードの追記があると嬉しい)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

動作環境を再現したわけではないので予想ですが、
Windowsだとターミナル(コマンドプロンプトなど)の標準の文字コードがshift-jisになっていたりするかもですね。

  •  コマンドプロンプト/PowerShellなどで実行結果を見ていますか?
  • nkfコマンドなどで、文字コード変換すれば、文字化けは解消しますか?
    参考:https://dev.classmethod.jp/tool/exchange-file-encode-by-nkf/#install-and-check-amazon-windows

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/06 18:22

    コマンドプロンプト/PowerShellなどで実行結果を見ていますか?
    ⇒見ていません。IDEの画面内で確認したいです!
    nkfコマンドなどで、文字コード変換すれば、文字化けは解消しますか?
    ⇒exeと同じ場所に配置してみましたが、だめでした…

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る