2024.5.18更新 まともに Unicode のテキストを扱おうとすると、結合文字列はどうしても避けることのできない問題です。ここではあまり深く掘り下げずに、ユーザの眼を通してこれを見ていこうと思います。 まずはじめに、Unicodeには「特殊な文字」があることを知っておきましょう。 上図を見てください。これは macOS のテキストエディットに入力した2つの「ポ」です。同じ文字が並んでいるだけのように見えます。でも実はこの2つ、文字データとしてはまったく違うものなんです。 左はいつも私たちが使っている1文字の「ポ」ですが、右は「ホ+半濁点」の2文字のデータで1文字になっています。これが Unicode の特殊な文字 “結合文字列” です。見た目が同じなので違いがまったく分かりません。 そこで違いが分かるように簡単なソフトを作ってみました。 Unicode Normalization
Unicode is a character set that aims to define all characters and glyphs from all human languages and writing systems, living and dead, from Egyptian hieroglyphs to space age emoji 🚀🛸. With more and more software being required to support multiple languages, or even just any language, not to mention those cute 😺🐶 emoji, Unicode has become essential to most software. Using different character s
背景 Python 2 用のコードを書くときは、 Python 3 対応を見越して # -*- coding: utf-8 -*- from __future__ import division, print_function, absolute_import をテンプレとして書いています。 __future__ はファイルごとにバラバラだと混乱を招くので、今関わってるプロジェクトでもこれを新規ファイルのテンプレとして登録してもらってます。 Python 3 の構文、リテラルを有効にする __future__ のうち、 unicode_literals だけは今まで使っていなかったのですが、ふと「あ、やっぱり使うべきだな」と思いついたので、そのへんをまとめます。 第三の文字列型 native string Python 2 には2つの文字列型 str (bytes) と unicode が
python2.xを使い始めて、必ずと言って良いほど遭遇するのが日本語(マルチバイト)関連の問題です。 ネットで同様のケースを調べて、あまり理解をせずに、対処療法的にその場の問題を回避している人も多いように思いますが、一度腰を据えて理解すれば、それほど難しくないですし、python以外の言語にも応用ができます。 マルチバイト問題については、概念だけではなく、実際に手を動かし、目で確かめる(文字コードそのものを見る)事が重要です。 今回は、python2.xで遭遇する文字コード関連のエラーを実際に発生させ、その理由を理解した上で対処を行ってみましょう。 文字コードの定義 ケース1 [ 再現 ] pythonスクリプトファイルのencodingをcp932にし、以下を記述します。 ustr = u'い' [ 現象 ] SyntaxError: Non-ASCII character '\x8
波ダッシュ(なみダッシュ、wave dash[注釈 1])とは、日本語表記における約物のひとつで、波線「」(はせん、なみせん)を指している。ダッシュ記号(—)の波形であることからそう呼ばれる[注釈 2]。 日本語における用法の多くは範囲を示すenダッシュ記号としての用法と長音符としての用法がある。範囲を示す場合、「から」という日本語の約物であり、純然たる日本語である。日本以外ではこのように使用されることはない。なお中国語でもenダッシュの代用又は長音符などとして使われることがある。 Windows XP等における日本語環境下では、表示字形が「」ではなく、波形の反転した「」に変わってしまう問題が発生していた[注釈 3]。これに付随して、波ダッシュの代用として音声記号等として用いられる全角チルダが不適切に使われることがあるため、混乱の元となっている[1][注釈 4]。 日本語において範囲を表す
Pythonにはじめて触って、いつのまにか1年が過ぎたのですが、一番はまったのは、やっぱりunicodeの扱いだったと思います。 特に、 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12: ordinal not in range(128) のようなエラーにはさんざん悩まされました。ここがたとえばrubyなど他の言語と比べてわかりにくいために、Pythonが取っつきにくい言語になっているのではないか、と個人的には思います。 そこで、このエラーに関係するはまりどころとTipsをいくつか列挙してみました。これからPythonに触れられる方の参考になればと思います。 なお、環境はUNIX上のPython 2.4, 2.5を想定しています。 u1はunicode型で、s1はstr型です。s1にどのよ
-> 趣旨と注意書き -> UTF8フラグ? -> UTF8フラグとPerlIOレイヤ -> UTF8フラグのついた文字列を記述する -> Wide character in print ... -> Encode -> utf8::* -> use utf8; -> use encoding; -> use UTF8 と use encoding -> JcodeからEncodeへ -> 情報源 <- モドル 趣旨と注意書き Perl 5.8.x のUnicode 関連です。 正直、5.8.x は、ネタでしか使ってなかったので(ぉ、ちゃんといじったことがありませんでした。 使ってみると、よくわかんなくなったので、ちょっとまとめてみました。 今でもあんまりわかってないかもしれないので、内容は無保証です。 突っ込み歓迎。 Jcode、Encodeのメンテナの弾さんから、ご指摘いただいたので、
perl は 5.8 から Unicode(utf-8) がサポートされました.5.6 でも Unicode に対応はしていましたが,ぜんぜん使い物にならず,ようやく 5.8 でまともに使えるようになったということです.ただせっかく使えるにもかか わらず perldoc などを見てもイマイチ使い方がわからないので,独自にまと めてみたのがこのページです. 誤った書き方や勘違いをしてい ることもあるので,形式的ですがこのページの内容は無保証です. 内容 文字コード変換 perlIO jperlからの移行 UTF-8フラグ 文字コード自動判別 Unicode Standard Unicode 正規化 その他 参考資料 文字コード変換 とりあえず perl5.8 で新しく組み込まれた機能を見るために,euc-jp から shift_jis への変換スクリプトをいくつか載せます. openを利用し
えーと、なにやら某所から Unicode について解説しろとの圧力がかかったので軽く書いておく。 Unicode はなにかというと What is Unicode? にこう書いてある。 Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language. つまり、Unicode は文字に対応する数字を定めるだけ。で、この対応する数字をコードポイントと呼ぶ。 たとえば、「odz@はてな」という文字列を Python を使って Unicode のコードポイントにしてみるとこうなる。 >>> print ' '.join('U+%04X' % ord(c) for c in u'odz@は
2007年03月10日17:30 カテゴリLightweight Languages javascript - encodeURIUnicode()と%uXXXX問題 これを見て、(de|en)codeURIUnicodeがあればいいと思ったので作ってみた sawatの日記 - Unicodeエスケープ なので、前述のような単に非ASCII文字をエスケープしたいだけのようなケースではUnicodeエスケープを使った方がよいです。Javaのpropertiesとかnative2asciiとかのやつです。 Decoded: Dan 弾 𪚲 Encoded: Dan%20%u5F3E%20%uD869%uDEB2 要は、U+00ffまではencodeURIComponent互換、それ以上はescape()互換というもの。こうしてencodeされたものは、CGI.pmとかでもほぼそのまま使える。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く