前の日 / 次の日 / 最新 / 2010-01

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2010-01-20 Wed

UTF-8 の文字数を求める [D言語]

以下のコードで求まる

import std.stdio;
import std.utf;

void main()
{
    string s = "あいうえお"; //UTF-8 な文字列

    size_t count = toUCSindex(s,s.length);

    writeln(count); //文字数は 5
}

逆に任意の文字位置からバイト位置を求めるには以下のコード。

import std.stdio;
import std.utf;

void main()
{
    string s = "あいうえお"; //UTF-8 な文字列

    size_t index = toUTFindex(s,3);//3文字目の位置

    writeln(index);
}

トラックバックが壊れてた [D言語]

エンコードされている文字列にエンコードされていない文字列を追加していたのと、
excerpt を 255 文字で切り捨てる処理に問題があった。

//excerpt は string 型で、エンコードされている
if(excerpt.length > 252) excerpt = excerpt[0 .. 252] ~ "...";

excerpt はデコードしてから長さを調べなくてはならない。
excerpt.length は文字数ではないので間違い。

std.utf を使って文字数を計算するようにする。