2018年8月31日金曜日

CentOS7のApache2.4.6でpythonを動かしていたら日本語ディレクトリを取得して表示するときにエラーが出た

題名に割と問題点を詰め込んだ感じになったが、さらなる詳細は以下の通り。
問題点と関係なさそうな情報は面倒なので割愛。

---
@実行環境
CentOS Linux release 7.5.1804 (Core)
Server version: Apache/2.4.6 (CentOS)
Python 3.6.5

@実行内容
Pythonで書かれたindex.cgiにFirefoxで接続。

@予期された動作
取得した日本語のディレクトリ名が表示される。

@結果
/var/log/httpd/error_logに以下のエラーが出力され、表示されない。
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 69-80: surrogates not allowed
---

因みに、このファイルはWindows10上のIISで動かしていた時は問題なく動作していた。
エンコーディング系のエラーだと一目でわかるので、早速以下の関数を実行して結果を見た。

---
print(sys.stdout.encoding)
print(sys.getdefaultencoding())
print(sys.getfilesystemencoding())
print(locale.getlocale())
---

結果はこう。

---
utf-8 utf-8 ascii (None, None)
---

sys.getfilesystemencodingの結果がascii に、locale.getlocaleの結果が(None, None)になっている。しかし、これをコマンドライン上で実行するとこうなる。

---
utf-8
utf-8
utf-8
('en_US', 'UTF-8')
---

つまり、Apacheの問題であることがわかる...ので、色々設定をいじってみたがどうもうまくいかない。
https://itekblog.com/ascii-codec-cant-encode-characters-in-position/」を参考にしたところ、LC_ALLが問題解決の糸口になりそうだ。しかし、LC_ALL=en_US.UTF-8にしても全く変化がない。スクリプト上でlocaleに「en_US.UTF-8」を設定してもasciiのままだ。
「/etc/sysconfig/httpd」で設定するようにしてもやっぱり変わらない。
Apacheのドキュメントをよくよく読むと、SetEnvを使えとある。早速「SetEnv LC_ALL en_US.UTF-8」を追加すると...。

---
utf-8 utf-8 utf-8 ('en_US', 'UTF-8')
---

日本語ディレクトリが使えるようになった。
Apacheはファイルシステムの情報取得にはasciiを標準で使うらしい(ソースのURLは忘れた)。でも、日本人してはやっぱり日本語のファイル・ディレクトリも取得できるようにしたいよね。

2018年8月5日日曜日

ポップアップで開く Ver2.2 リリース

Ver 2.2の新機能

・機能
・設定
対象の選択形式を「サイドバーで開く」と同じ形式にしました。
・効率
無駄な処理を減らすことでブラウザーへの負荷が少なりました。

・他
・開発者向け
設定情報を全てjsonファイルへ移行しました。
全てのファイルをUTF8に変換しました。
import機能が実装された場合に対応できるように、「background.js」を「background.html」に置き換えました。
コンテキストメニューを再生成する処理を「option.js」に移動しました。Ver2.2では設定変更をした場合のみコンテキストメニューが再生成されます。

https://addons.mozilla.org/ja/firefox/addon/open-in-popup/

2018年8月4日土曜日

Visual Studio 2017でJavaScriptのimport機能を使ってたらエラーが出た

題名のまま。こんなエラーが出る。
Severity Code Description Project File Line Suppression State
Warning TS1148 (JS) Cannot use imports, exports, or module augmentations when '--module' is 'none'. Miscellaneous ...\OpenInPopup\options\options.js 14 Active
しかし、Mozillaのページを見ると構文は正しいようだ。Optionsを見ていたら、こんな項目を見つけた。
Text Editor→JavaScript/TypeScript→Project→General→
ECMAScript version for files that are not part of a project

importは「ECMAScript 6」から定義されているので、「ECMAScript 6」を選択するのが正しい。
実際に「ECMAScript 6」を選択したところ、エラーが表示されなくなった。