New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Termuxでは日本語ツイートができなかったが、BIN/urlencodeでenv -i awkするとできるようになる #8
Comments
それは環境変数の有無が原因ではない。GNU版の動きがおかしいのが問題なのだ。従って、busybox版を選択すれば正常に実行されるし、例え環境変数を無くしてもGNU版を選ぶ限り解決しない。
今の時点でわかっている対応方法は、シンボリックリンク |
それでも、awkがgawkへのシンボリックリンクで、かつgawkを
追記 これをGAWK開発者にバグ報告しました。 |
助言ありがとうございます。
余談ではございますが、sedは「これはGNUではない」と表示され、他の多くのコマンドはtoyboxのものであることがわかりました。
|
以前GNUに「バグ報告」をした際の返事は次の内容でした。
この内
|
|
そこで、私は以前から次のように考えていました。 awkcmd=awk
case "$(
gawk -b 'BEGIN{printf "%c",128}' 2>/dev/null |
od -A n -t x1 -v |
tr -Cd 0123456789AaBbCcDdEeFf
)" in (80) awkcmd='gawk -b';; esac これこそがPOSIXロケールの有無に関係なく(GAWKについては)対応可能な方法だと考えました。 それからTermuxにはPOSIXロケールが提供されない情報の提供を怠り、大変申し訳ございません。 |
なるほど、それなら次のように書けばもっと短くなるな。printfの結果が
だが、awkcmdというシェル変数にコマンド名を書き出すよりも、次のようにして alias 定義を追加する方がよいな。
さらに言えば、提案されたコードはgawkがあればそれを積極的に選択する点が気にくわんな。次のようにして、どうしようもなければ仕方なく使うくらいの方がよいな。個人的には。
どう思うかな? |
ご提案感謝申し上げます。しかし、UTF-8しか提供されない環境には対応しているのに対し、(存在するかは存じませんが)EUC-JPしか提供されない環境、その他のロケールしか提供されない環境などのことを考えれば逐次対応が必要になるかもしれません。 最早いっそのことすべてのバイナリを 追記。 |
うむ、UTF-8エンコーディング以外を採用したロケールのことは想像していなかったな。そこで、我が知っている全てのロケールを指定した場合のバイトパターンを観察してみた。たくさんのロケールをサポートしている環境(例えばCentOS)で次のワンライナーを試してみよ。(ただし、"awk"のところは、環境によっては"gawk"と書き換える)
これを見ると、返されるバイトパターンは次の3種類であることがわかる。
3番目のもの。これこそが、1バイトでもなく、UTF-8でもない、第3のバイトパターンというわけだな。我が前に提案した判別コードは1バイトかUTF-8かの2パターンの判別にしか対応していなかった。指摘してくれたおかげでこの問題点に気づけた。 ならば、この判別コードでよいのではないか?
なお、gawk以外の実装、つまり |
ご提案ありがとうございます。しかし、「Cロケールが提供されている、またはインストール可能である」という時点で既に90%の解です。これに対して今のところ「 今回のissueにおいて主な解決策を最初に自ら示したのに対し、未知の環境に対する不要不急の解決策の模索をさせてしまい、また、貴重なお時間を奪ってしまい、誠に申し訳ございませんでした。このissueを、本来あるべき姿から大幅に逸脱させてしまったことを謝罪申し上げます。 |
元々のものでは「statusが空文字列になってしまう」ことがBIN/tweet.shやBIN/twsrch.shなどで確認されていました(ASCII文字はそのまま)。
そこで-vxオプションによりバグの解析を行った際にurlencodeを行ったあとにstatusに該当する部分が消滅することが確認されました。
これに対しUTL/urlencodeの、最初のawkについて、
env -i awk
と編集することにより、urlencodeが意図通りに動き、日本語でのツイートができるようになります。同様に、BIN/twtl.shでは日本語など、(おそらくASCII文字列ではない)ツイートについては文字化けされた状態で表示されますが、UTL/unescj.shのawkを
env -i awk
で実行させることにより正しく表示されるようになります。ロケールの変更を行ってもTermux上ではロケールの固定によりawkに0から255まで全てのバイトを出力させることができない こと、そして全ての環境変数を無効にした状態でならできることが原因なのではないかと思われます。
The text was updated successfully, but these errors were encountered: