# Windowsコマンドラインからcurlで全角文字を送るには

**URL:** <https://discuss.elastic.co/t/windows-curl/49604>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [May 10, 2016, 2:25am UTC](https://discuss.elastic.co/t/windows-curl/49604 "2016-05-10T02:25:31Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![yyam](https://avatars.discourse-cdn.com/v4/letter/y/ed655f/32.png) [@yyam](https://discuss.elastic.co/u/yyam)\
**Post date:** [May 10, 2016, 2:25am UTC](https://discuss.elastic.co/t/windows-curl/49604/1 "2016-05-10T02:25:31Z")

</div>

Windows7 (日本語) のコマンドプロンプトから  
curl (curl-7.33.0-win64-nossl) で  
elasticsearch にインデックスのフィールドの値を入力するとき  
値が英数字の時は正しく入力できるのですが  
値が全角文字の時は以下のようなエラーになってしまいます。  
値が全角文字の時はどのように記述すればよろしいのでしょうか。

curl -X PUT [http://localhost:9200/hoge\_index/hoge\_type/1?pretty=1](http://localhost:9200/hoge_index/hoge_type/1?pretty=1) -d "{"name":"yamada"}"  
{  
"\_index" : "hoge\_index",  
"\_type" : "hoge\_type",  
"\_id" : "1",  
"\_version" : 2,  
"\_shards" : {  
"total" : 2,  
"successful" : 1,  
"failed" : 0  
},  
"created" : false  
}

curl -X PUT [http://localhost:9200/hoge\_index/hoge\_type/1?pretty=1](http://localhost:9200/hoge_index/hoge_type/1?pretty=1) -d "{"name":"山田"}"  
{  
"error" : {  
"root\_cause" : [ {  
"type" : "mapper\_parsing\_exception",  
"reason" : "failed to parse [name]"  
} ],  
"type" : "mapper\_parsing\_exception",  
"reason" : "failed to parse [name]",  
"caused\_by" : {  
"type" : "json\_parse\_exception",  
"reason" : "Invalid UTF-8 start byte 0x8e\n  
at [Source: org.elasticsearch.common.io.stream.  
InputStreamStreamInput@32158d; line: 1, column: 11]"  
}  
},  
"status" : 400  
}

> **[コマンドプロンプト起動時、自動的に文字コードをUTF-8にして日本語もちゃんと表示できるようにする方法 - Qiita](https://qiita.com/yufu/items/86a455f948a3e1c0ef97)**
>
> Windows7 でのみ動作確認済。XPとかだとうまくいかないかもっぽぃらしい。
> 
> \# 前提知識
> \* コマンドプロンプトのデフォルト文字コードは Shift\_JIS
> \* \`chcp\` コマンドで文字コードを変更できる
> \* ただし、文...

  
に書かれているように、chcp 65001を実行して  
プロパティのオプションタブで現在のコードページが  
65001(UTF-8)と表示されていることを確認した後に、  
3つのフォントのどれを選んでも、  
全角文字を入力することができませんでしたので、  
(全角文字を入力する方法が分かりませんでしたので)  
curl -X PUT [http://localhost:9200/hoge\_index/hoge\_type/1?pretty=1](http://localhost:9200/hoge_index/hoge_type/1?pretty=1) -d "{"name":"山田"}"  
をコピーしてペーストして実行しましたが(@32158dの部分以外は)同じエラーになります。

よろしくお願いします。

---

<div class="post-metadata">

**Author:** ![kazuhira\_r](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kazuhira_r/32/8892_2.png) [@kazuhira\_r](https://discuss.elastic.co/u/kazuhira_r)\
**Post date:** [May 10, 2016, 4:55am UTC](https://discuss.elastic.co/t/windows-curl/49604/2 "2016-05-10T04:55:23Z")

</div>

chrp 65001の設定で、UTF-8に対応するのは表示のみで、入力はできないように見受けられます。

> **[chcp【コマンド】とは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](http://wa3.i-3-i.info/word12332.html)**
>
> 用語「chcp【コマンド】」の意味を何となく説明しています。

  

> **[【無理】WindowsのコンソールでUnicodeを使いたい - Qiita](https://qiita.com/ironsand/items/ec0675644a55a69855d6)**
>
> 前にも書いた気がするのですが、できることの情報共有だけじゃなくて出来ないことの情報も積極的に公開していったほうが良いと思うんです。そうすれば無駄に検索に時間を費やすこともなくなるし。
> 
> できないと思って情報公開したら「それできるよ。」...

手元の環境で同じコマンドを実行してみましたが、  
（`curl -X PUT http://localhost:9200/hoge_index/hoge_type/1?pretty=1 -d "{\"name\":\"山田\"}"`）  
確かに同様のエラーになりました（直接入力は不可でしたので、コピー＆ペーストです）

ただエラーの内容としても、  
`Invalid UTF-8 start byte 0x8e`  
となっていますので、Shift\_JISコードで送信されているようです。

送信する内容を1度UTF-8でテキストファイルに保存して、-d @[ファイル名]としてファイルの中身を送信される方がよいのではないでしょうか？

---

<div class="post-metadata">

**Author:** ![yyam](https://avatars.discourse-cdn.com/v4/letter/y/ed655f/32.png) [@yyam](https://discuss.elastic.co/u/yyam)\
**Post date:** [May 10, 2016, 7:18am UTC](https://discuss.elastic.co/t/windows-curl/49604/3 "2016-05-10T07:18:47Z")

</div>

## ありがとうございます。 コマンドラインから直接送るのは難しいということですね。 教えていただきましたように、 curl -X PUT [http://localhost:9200/hoge\_index/hoge\_type/1?pretty=1](http://localhost:9200/hoge_index/hoge_type/1?pretty=1) -d @a.json ---a.json(UTF-8)----- { "name":"山田" }

とファイルにして実行しましたところ、  
Elasticsearch-head プラグインでは正しく表示されているので、  
正しく送られたのですが、  
curl -X GET [http://localhost:9200/hoge\_index/hoge\_type/1?pretty=1](http://localhost:9200/hoge_index/hoge_type/1?pretty=1)  
で取得してみると、全角の部分が文字化けしています。

chrp 65001の設定では、入力はできないが、  
UTF-8に対応する表示は可能のように読み取れましたので、  
コマンドプロンプトのプロパティのフォントをMSゴシックにして  
chcp 65001を実行後、  
プロパティのフォントには  
(1)Consolas  
(2)Lucida Console  
(3)ラスターフォント  
の3種類になっているので、順番に変えて  
curl -X GET [http://localhost:9200/hoge\_index/hoge\_type/1?pretty=1](http://localhost:9200/hoge_index/hoge_type/1?pretty=1)  
を実行してみたのですが、  
いずれも全角の部分が正しく表示されませんでした。

curl -X GETで全角文字を正しく表示することはできますでしょうか。

よろしくお願いします。

---

<div class="post-metadata">

**Author:** ![kazuhira\_r](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kazuhira_r/32/8892_2.png) [@kazuhira\_r](https://discuss.elastic.co/u/kazuhira_r)\
**Post date:** [May 10, 2016, 7:31am UTC](https://discuss.elastic.co/t/windows-curl/49604/4 "2016-05-10T07:31:12Z")

</div>

> curl -X GETで全角文字を正しく表示することはできますでしょうか。

可能です。

エンコード変更前にあらかじめMSゴシックに設定しておき、  
`chcp 65001`  
としてコマンドプロンプト表示をUTF-8にした後、そのままcurlを実行すればマルチバイト文字も表示されるはずです。

`chcp 65001`  
を実行した後に、フォントを変更しないようにしてください。chcp 65001後はMSゴシックが表示されていないはずですが、プロパティを変更しなければ大丈夫だと思います。

---

<div class="post-metadata">

**Author:** ![yyam](https://avatars.discourse-cdn.com/v4/letter/y/ed655f/32.png) [@yyam](https://discuss.elastic.co/u/yyam)\
**Post date:** [May 11, 2016, 2:23am UTC](https://discuss.elastic.co/t/windows-curl/49604/5 "2016-05-11T02:23:46Z")

</div>

ありがとうございます。  
教えていただきました通りにしましたら、  
正しく表示されるようにました。

> chcp 65001  
> を実行した後に、フォントを変更しないようにしてください

の助言が、私にはとても役に立ちました。

chcp 65001実行直後に、  
フォントサイズが未設定になり、警告表示されるので、  
気持ちが悪いので、必ずサイズを設定していたので、  
もし、この助言がなかったら解決が長引いていたと思います。  
とても親切な助言ありがとうございました。

あと1つだけ気になることがあるのですが、  
レスポンスの最後に、  
curl: (23) Failed writing body (145 != 149)  
と表示されているのですが、  
これは何の問題が起きていると言っているのでしょうか。

* * *

## { "\_index" : "hoge\_index", "\_type" : "hoge\_type", "\_id" : "1", "\_version" : 1, "found" : true, "\_source" : { "name" : "山田" } } curl: (23) Failed writing body (145 != 149)

・[http://stackoverflow.com/questions/16703647/why-curl-return-and-error-23-failed-writing-body](http://stackoverflow.com/questions/16703647/why-curl-return-and-error-23-failed-writing-body)  
に同じような質問がありましたが、ここの回答の意味が私にはよく分かりませんでした。

よろしくお願いします。

---

<div class="post-metadata">

**Author:** ![kazuhira\_r](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kazuhira_r/32/8892_2.png) [@kazuhira\_r](https://discuss.elastic.co/u/kazuhira_r)\
**Post date:** [May 11, 2016, 4:26am UTC](https://discuss.elastic.co/t/windows-curl/49604/6 "2016-05-11T04:26:14Z")

</div>

curlで-iオプションを付けると、Content-Lengthが表示されますが、ここで返却される値とcurlが認識している値が合わない状況になっているようです。

> curl -i -XGET [http://localhost:9200/hoge\_index/hoge\_type/1?pretty=1](http://localhost:9200/hoge_index/hoge_type/1?pretty=1)  
> HTTP/1.1 200 OK  
> Content-Type: application/json; charset=UTF-8  
> Content-Length: 149

なお、エンコードをShift\_JISのまま（UTF-8に変更しない）場合はこのエラーは発生しないため、UTF-8環境に変更したことにcurlが影響を受けていると思います。

---

<div class="post-metadata">

**Author:** ![yyam](https://avatars.discourse-cdn.com/v4/letter/y/ed655f/32.png) [@yyam](https://discuss.elastic.co/u/yyam)\
**Post date:** [May 13, 2016, 12:14am UTC](https://discuss.elastic.co/t/windows-curl/49604/7 "2016-05-13T00:14:01Z")

</div>

返却される値とcurlが認識している値が合わないといっていたのですね。  
全角1個のLengthの値の扱いの違い(1と3)で起きているように見えます。  
いろいろ調べていただきましてありがとうございました。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:48pm UTC](https://discuss.elastic.co/t/windows-curl/49604/8 "2017-07-06T13:48:23Z")

</div>


