Unicode結合文字の取り扱い 2014/11/06
ちょっと調べた範囲では結合文字は、文字数のカウントなどで特別扱いしたりせずに普通の文字と同じ扱いになる。結合文字を考慮して、人間の直感と一致する文字単位で文字を取得したり、文字数を調べたりする方法はないものか。
Java / Scala 2014/11/06
Scalaでの例
val str = "a\u0304";
println(str);
// => ā
val len = str.length();
println(len);
// => 2
println(str.codePointCount(0, len));
// => 2
val str2 = "\u0101";
println(str2);
// => ā
println(str == str2);
// => false
Python 2014/11/06
str = "a\u0304"
print(str)
# => ā
print(len(str))
# => 2
str2 = "\u0101"
print(str2)
# => ā
print(str == str2)
# => False
Ruby 2014/11/22
str = "a\u0304"
p str
# => ā
p str.length
# => 2
str2 = "\u0101"
p str2
# => ā
p str == str2
# => false
Perl 2014/11/02
use utf8;
use Encode qw/encode_utf8/;
print encode_utf8("a\x{0304}\n");
# => ā
print length("a\x{0304}");
# => 2
print encode_utf8("\x{0101}\n");
# => ā
if ("\x{0101}" eq "a\x{0304}") {
print "equals";
} else {
print "not equals";
}
# => not equals