タグ

charcodeとperlに関するkenjiro_nのブックマーク (9)

  • utf8プラグマ使用時の文字列のバイト数の取得方法 - ちゃまぐの備忘録

    bytesプラグマを使うことで解決する。 (11/02/12)追記しました 何もせずに length をしてみると。 use strict; use warnings; use utf8; my $str = "あいうえお"; print length $str,"\n"; 結果は文字数。 5 以下の用に bytesプラグマを使うことで、バイト数を取得できる。 use strict; use warnings; use utf8; my $str = "あいうえお"; { use bytes; print length $str,"\n"; } 結果は、バイト数 15 ブレースで囲むのは、bytesの効果が及ぶ範囲をレキシカルスコープに限定するため。 bytesは何をやってくれるのかというと… use bytes プラグマはそれの現れたレキシカルスコープの残りで文字セマンティクスを無効化し

    utf8プラグマ使用時の文字列のバイト数の取得方法 - ちゃまぐの備忘録
  • Windows上でperlを使って日本語ファイル名を操作する(メモ – OSAKANA TAROのメモ帳

    slashdot.jpの「Perlはゾンビだ」に、日Windows環境において、perlを使って日語ファイル名を操作する時の注意点がまとめられていたので、引用&備忘録化。 過去にperlスクリプトを作る際、ファイル内に書かれた日語の操作に関することはWindows/Linuxで動作が共通化できたものの、「日語ファイル名の取り扱い」について、Windows上での動作がいまいち分からず、面倒になり、NASに該当ファイル群を置き、Linuxで処理する、ということをしたことがある。 その時に受けた感じからすると、以下の解説は非常に納得がいくモノだった。 「Anonymous Coward の書き込み (#2628619) 」より コマンドラインからの引数取得とかファイル操作とかのたびに @ARGV = map { decode(‘cp932’, $_) } @ARGV; とか open

  • [tips][perl] Perlで文字コードをいい感じに処理する方法 | Casual Developers Note

    日頃のつまらないルーチンワークは全てスクリプト化している俺です。スクリプトは動的言語であれば気楽にかけるので何でもよいのですが、うちの会社の場合だと、ローカル環境はWindows、商用環境はLinuxなので、どちらでもそれなりに動くPerlをよく使います。スクリプティングでよくやるのは「ファイルを読み込み→いい感じの処理→ファイルを出力」だと思うので、そこら辺の注意点を忘れないように書いておきます。 Perlの文字コード Perlは内部で「内部文字列(flagged utf8)」というUTF-8によくわからないフラグがついた文字コードとして扱います。そのため、外部からの文字列のやり取りには、文字コード変換が不可欠です。文字コードを考えずに扱っていると、日語を使った瞬間に文字化けです。 #1. まずは「use utf8;」を付けて、UTF-8で保存する。 # Perlファイル (UTF-8

    [tips][perl] Perlで文字コードをいい感じに処理する方法 | Casual Developers Note
  • 404 Blog Not Found:perl - Encode 入門

    2008年04月09日01:00 カテゴリLightweight Languages perl - Encode 入門 すでにOSCONでもYAPCでも、あちこちそちこちでこの基方針に関しては話したのですが、ここ 404 Blog Not Found でも改めて。 Perl で utf8 化けしたときにどうしたらいいか - TokuLog 改め だまってコードを書けよハゲ 入り口で decode して、内部ではすべて flagged utf8 で扱い、出口で encode する。これがすべてです!とにかくこの基方針をまもっていれば幸せになれます。ここでは、EUC-JPでエンコードされたファイル中の「小飼弾」「こがいだん」「コガイダン」「Kogai Dan」を正規表現で書き換えて標準出力にEUC-JPで出力するプログラムを例にとって説明します。 decode() then encode(

    404 Blog Not Found:perl - Encode 入門
  • Perl5 において chomp() とはなにをするものか - tokuhirom's blog

    えてして、プログラミングにおけるバグの発生源は、使い方をまちがえていることに起因するものも多い。 を電子レンジでかわかす人がいるように。 そもそも chomp() という組み込み関数はなぜ必要なのか。 Perl5 では、データを行単位で処理するということが重視されたインターフェイスになっている。これは一般的なテキスト処理の頻出パターンだからだ。 while (<>) { chomp; say if /foo/; } これは、入力データを行ごとにとりだし、改行をとりのぞき、/foo/ という正規表現にマッチする行だけを表示するというプログラムだ。 Perl5 を知っている人なら、だれもが簡単に理解できる。 ここで $/ という変数が問題となる。$/ は、行の区切りがはいっている特殊なグローバル変数で、awk でいうところの RS にあたるものだ。 この $/ を変更することにより「行」の区

  • Shift-JISテキストを正しく扱う perl 日本語パターンマッチ正規表現 の問題と落とし穴

    最近の更新履歴 2006-10-28: 「Shift-JISの漢字を含むファイル名/パス名」について若干追記。 2005-03-26: 「最初に」中、XML日語プロファイル第2版に基づき、若干追記。 2005-03-09: 「最初に」中、文章を若干修正。 2003-06-24: Shift-JISの漢字を含むファイル名/パス名 2003-05-31: 「最初に」中、「シフトJIS」などの表記について。 2003-05-24: CP932重複定義文字の変換 2002-08-30: Perl 5.8.0 について。 2002-01-17: 長い文字列に対する正規表現検索 2001-12-15: ShiftJIS::Collate が overrideCJK パラメータを廃止したことに伴う 日語文字列を並び替えるの書き換え。 最初に 日語の文字コードにはいくつかのものが使われています。ある

    kenjiro_n
    kenjiro_n 2010/03/11
    (?:[\ \n\r\t\f]|\x81\x40)で空白のパターン化。最後のx81x40がいわゆる全角スペースに相当。「手間をかけても、Shift-JISを用いることに意義がある」という件にイラついたのも一応言っておこう。
  • ShiftJIS::Regexp - Shift-JISで書かれた正規表現

    名称 概要 詳細 関数 基的な正規表現 メタ文字 文字クラス 等価文字クラス 定義済み文字クラス 文字クラスの例 正規表現中の埋め込みコード (Perl 5.005 以降) 埋め込み修飾子 誤マッチを避ける 注意事項 既知のバグ 著者 関連モジュール 名称 ShiftJIS::Regexp - Shift-JISで書かれた正規表現 概要 use ShiftJIS::Regexp qw(:all); match('あお12', '\p{Hiragana}{2}\p{Digit}{2}'); # これは次行と等価です。 match('あお12', '\pH{2}\pD{2}'); match('あいいううう', '^あい+う{3}$'); replace($str, 'A', 'A', 'g'); 詳細 このモジュールは、正規表現をShift-JISで書いてPerlで用いるための 幾つかの関

  • Perl で utf8 化けしたときにどうしたらいいか - TokuLog 改メ tokuhirom’s blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • JavaScriptの基礎からはじめよう - JavaScript講座

    変数は以下のように値を代入したり出力することができます。 # 変数に文字列を代入 $value = "テストです"; # 変数を出力 print $value; 【参照ページ】 変数 配列 複数の値を1つの変数で管理したい場合は、『配列』という変数が最適です。 配列を初期化する場合は、要素をカッコで囲み、各要素毎にカンマで区切ります。 @week = ('日曜', '月曜', '火曜', '水曜', '木曜', '金曜', '土曜'); 配列はインデックスを使って参照します。インデックスは 0から始まるので注意してください。たとえば1番目のデータ "日曜" を呼び出すときは、$week[0]、"月曜"なら $week[1] とします。 # 配列 @week の1番目の要素を表示 print $week[0], "\n"; > 日曜 # 配列 @week の2番目の要素を表示 print $

  • 1