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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

2回答

392閲覧

Go IDE@Windows7 での文字化け

hachico

総合スコア12

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2018/11/02 09:38

編集2018/11/08 02:07

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() }

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2018/11/02 09:56

実際に動くコードを貼ってもらえると回答しやすいです。また、リクエスト先の事例もあったほうがよいかと思います。
nobonobo

2018/11/06 10:44

リクエスト先をふせられましたが、他の一般的なサイトも同じ現象が起こるのでしょうか。それとも伏せられたサイト特有の現象でしょうか。
nobonobo

2018/11/07 02:10 編集

リクエスト先 https://www.google.co.jp で問題の現象は再現できそうなので試してみてください。質問の回答が得られるかどうかにダミーのリクエスト先でも再現可能かどうかはとても重要ですのでぜひ質問の修正を。
nobonobo

2018/11/07 10:05

「ちなみに、ファイル出力するとちゃんとutf-8で見えます。」とありますがサンプルの出力みるかぎりファイル内容も同じく化けているように見えます。表示環境はなんでしょうか?
hachico

2018/11/08 02:09

何度もご指摘ありがとうございます!「表示環境」の意味を取り違えてたらすみません…
nobonobo

2018/11/08 02:58

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

2018/11/08 03:01

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

2018/11/12 01:38

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

回答2

0

ベストアンサー

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

投稿2018/11/12 02:41

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

  • コマンドプロンプト/PowerShellなどで実行結果を見ていますか?
  • nkfコマンドなどで、文字コード変換すれば、文字化けは解消しますか?

参考:https://dev.classmethod.jp/tool/exchange-file-encode-by-nkf/#install-and-check-amazon-windows

投稿2018/11/04 23:38

mats0228

総合スコア219

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hachico

2018/11/06 09:22

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問