Hatena::ブログ(Diary)

趣味的にっき このページをアンテナに追加 RSSフィード

2007-01-02

[] UCS4⇔UTF8の変換 16:25  UCS4⇔UTF8の変換を含むブックマーク  UCS4⇔UTF8の変換のブックマークコメント

CinnamonにUCS4⇔UTF8の変換を行う関数を追加しました。id:ha-tan:20070101:1167710733のUNFと組合せることで、EUCとかShift-JISとかUTF8とかの文字列をUCS4(Haskellの内部文字コード)の文字列に変換することができます。

ついでに。UCS4⇔UTF8変換の仕様はRFC2279とRFC3629に書いてあるのですが(RFC3629が出てRFC2279は廃止)、RFC2279の変換表はUTF8が6バイトまで、RFC3629は4バイトまでになっています。RFC3629はUTF16の範囲の記述になっているのですが、何で新しい方のRFCで制限がきつくなる方向に変わるのでしょう? その辺の経緯がよくわかりません… というかUTF16じゃそのうち困るんじゃないのかな?

参照: RFC2279 RFC3629

[] 文字列の両端の空白を削除する関数 14:37  文字列の両端の空白を削除する関数を含むブックマーク  文字列の両端の空白を削除する関数のブックマークコメント

RubyでいうところのString#stripです。何も考えずに素直に実装するとこうなりました。何とかreverseを消したいところ。うーむ。

module Main (main) where

import Data.Char (isSpace)

strip :: String -> String
strip = stripR . stripL
  where
    stripL = dropWhile isSpace
    stripR = reverse . stripL . reverse

main :: IO ()
main =  print $ strip "  \t\r\nhoge  " -- => "hoge"

inajobinajob 2008/09/28 03:10 Haskellの勉強がてらソースを参考にしました。
使っていてちょっとバグ?らしきものを見つけたので報告させていただきます。

http://d.hatena.ne.jp/inajob/20080927#1222538957

何はともあれ 実用的なプログラムを公開していただきありがとうございます

Connection: close