2020-04-23
IchigoJamのプログラムを他のPCとやりとりする際、半角カタカナはなんとかなるとして、絵文字が文字化けが悩ましいところでした。 プログラム内の絵文字を禁止としてもよかったのですが、作りやすさと、読みやすさに圧倒的な理があります。

そうだ、現代Unicodeにも絵文字があるじゃない!IchigoJamとUnicode絵文字の対応表を作って、解決しました!(日本ゲーム大賞U18部門への応募も安心)


IchigoJam web」New! IchigoJam絵文字のexport/import対応!
対応表はこちら!(自由に使えるオープンデータ、#80は全角空白に対応)

←→↑↓♠♥♣♦⚫⚪🔟🍙🐱👾♪🌀 🚀🛸⌇🚁💥💰🧰📶🚪🕴🕺💃🏌🏃🚶🍓   ▘▝▀▖▌▞▛▗▚▐▜▄▙▟█ ・━┃╋┫┣┻┳┏┓┗┛◤◥◣◢

扱いやすくなったIchigoJamのプログラム、おとなもこどなも、はじめてのプログラミングに Let's try!(時間割ガチャ IchigoJam教材フィルター


【高橋名人インタビュー:後編】「ゲームは1日1時間」の提唱者にあらためて聞く「テレビゲームは誰のもの?」 | eSports World(eスポーツワールド)」より
PCNこどもプロコンで特別審査員として来ていただいた、高橋名人、IchigoJamでのプログラミング姿を披露!(高橋名人のIchigoJam入門


PCNこどもプログラミングコンテスト2019-2020最終審査 - YouTube」も公開!

全角半角問題とサロゲートペアとJavaScriptの話

コンピューターが誕生間もなく、メモリが今の10億倍くらい高価だったころ、文字は7bitで表現していました。 今でも削除(delete)の文字コードが2進法で1111111という名残を遺しています。(削除文字 - Wikipedia

やがて、切りよく8bit(256種)になり、増えた128byteを各国それぞれが自由に使い、日本では半角カタカナが誕生。 ただ、漢字を入れようとすると当然、8bitでは足りず、JISが生まれ、8bitとの共存のためShift-JISが誕生、16bit化しました。 ここで大問題。漢字を使わない文化圏において、文字は8bitで十分、16bitの文字コード(いわゆる、全角文字)を想定していないプログラムがうまく動きません。

これを何とかしよう奮闘としたのが第一次全角半角問題。グローバル化に伴い、文字化け問題の解消のため誕生したUnicodeにより、一安心。 と、思いきや、JavaScriptでは内部の文字コードを16bitで扱っているので、16bitでは収まらない漢字(𩸽、ほっけ)や、絵文字(🐱、🍓など)がサロペートペアとして再び2文字化。 これを勝手に第二次全角半角問題と呼びます。

JavaScriptで絵文字を扱う時の注意、lengthで返すのは16bitコードの長さなので文字列の長さと異なります。また、charAtで返ってくるのは16bitで、サロゲートペアの片方だけの可能性があります。 そのくらい、charAtやlengthの内部でやってよと思いますが、現在の実装は残念ながら多分歴史的な経緯もあってこうなっているので、一文字毎に分離しましょう。

const decU = function(s) { if (s == null) return null return s.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\s\S]/g) || [] } const encU = function(uni) { return uni.join("") } // test const s = 'IchigoJam🍓!' const s2 = encU(decU(s)) console.log(s, decU(s), s2, s == s2)

21bitのUnicodeはサロゲートペアをデコードするか、codePointAtを使うことで取得できます。 JavaScriptで文字列を扱うときにハマるポイントなので、頭の片隅に置いておくといいでしょう。

新型コロナウイルス対策ダッシュボードの更新について

COVID-19 Japan 新型コロナウイルス対策ダッシュボード」の最新状況
毎日更新してきたダッシュボードですが、残念ながら、昨日の厚生労働省の定例更新では、都道府県別のデータが公表されず、速報都県以外のデータを更新できていません。


新型コロナウイルス感染症について
政府・行政の透明性確保に、安定的な情報提供やオープンデータが有効です。情報提供、お待ちしています!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS