JSやPythonについて知識が少ないため、頓珍漢なことを書いている箇所もあるかと思います。
また、このサイトを利用するのは初めてで、様式等不備があるかもしれません。
申し訳ありませんが、ご容赦ください。
<環境>
XAMPP 8.1.6
Anaconda 4.12.0(Python 3.9.12)
VSCode 1.67.2
Firefox 100.0.2
Google Chrome 102.0.5005.61
<やりたいこと>
JSからデータを投げてPythonで処理し、結果を受け取る
<コード>
ともにutf-8で保存している
JavaScript
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"> 5 6 <title>Ajax Sample1</title> 7</head> 8<body> 9 <button id="button">送信</button> 10 <div><br></div> 11 <div id="result">送信ボタンをクリックしてください。Ajax通信します。</div> 12 <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 13 <script> 14 // jQuery 15 $(function () { 16 $("#button").click(function (event) { 17 $.ajax({ 18 type: "post", 19 url: "recieve.py", 20 data: '送信メッセージ' 21 }) 22 // Ajaxリクエストが成功した場合 23 .done(function (data) { 24 console.log(data); 25 }) 26 // Ajaxリクエストが失敗した場合 27 .fail(function (XMLHttpRequest, textStatus, errorThrown) { 28 alert(errorThrown); 29 }); 30 }); 31 }); 32 </script> 33</body> 34</html>
Python
1#!C:/Users/***/.conda/envs/py3912/python.exe 2# coding: utf-8 3 4import sys 5 6recieve = sys.stdin.readline() 7recieve = recieve + "です!" 8 9print('Content-Type: text/html;charset=utf-8\n') 10print(recieve) 11print('あ'.encode())
<問題>
上の状態で実行すると、ブラウザのコンソールには以下のように表示される。
Console1
1送信メッセージ�ł�! 2b'\xe3\x81\x82'
e38182は確かにutf-8で「あ」を表す。
しかし、そのまま表示しようとすると、「です」の部分のように文字化けしてしまう。
(また、「ソ」(sjis:835C)を表示しようとするとバックスラッシュ(sjis:5C)が表示された。)
<試したこと>
・Pythonのcharsetを「=shift_jis」にしてみる
→実行結果は以下のようになる。Pythonで追加した文字が正しく表示され、JSから送った文字が化ける
Console2
1騾∽ソ。繝。繝�そ繝シ繧クです! 2b'\xe3\x81\x82'
・jQuerryに、overrideMimeTypeでcharsetを指定してみる
→utf-8を指定した場合は最初(Console1)と同じ結果、shift_jisを指定した場合は前項(Console2)と同じ結果
<まとめ>
同様の事例を検索しつつ色々と試しましたが、解決できませんでした。Python上のrecieveの中身は、前半(JS由来)がutf-8、後半(Pythonで追加)がshift_jisになっているということなのでしょうか。ソースファイル自体も、冒頭の宣言もutf-8なのに、一体どこからshift_jisが出てくるのか、理解不能です...
なぜこのような現象が起こるのか、どうすれば解決できるのか、ご教授いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー