Julia的介绍性指南Learn Julia in Y Minutes阻止用户索引UTF8字符串:
# Some strings can be indexed like an array of characters
"This is a string"[1] # => 'T' # Julia indexes from 1
# However, this is will not work well for UTF8 strings,
# so iterating over strings is recommended (map, for loops, etc).
为什么不鼓励迭代这些字符串?具体关于这种备用字符串类型的结构会使索引错误?这是Julia特定的陷阱,还是扩展到所有支持UTF8字符串的语言?
答案 0 :(得分:12)
因为在UTF8中,字符并不总是以单个字节编码。
以德语字符串böse
(邪恶)为例。
UTF8编码中此字符串的字节为:
0x62 0xC3 0xB6 0x73 0x65
b ö s e
正如您所见,变音符ö
需要2个字节。
现在,如果你直接索引这个UTF8编码的字符串"böse"[4]
将会给你s
而不是e
。
但是,您可以在julia中将字符串用作可迭代对象:
julia> for c in "böse"
println(c)
end
b
ö
s
e
自从你问过,不,UTF8字符串的直接字节索引问题并不是特定于Julia。
进一步阅读的建议:
http://docs.julialang.org/en/release-0.4/manual/strings/#unicode-and-utf-8
答案 1 :(得分:1)
只是为了扩展Scott Jones的评论,Julia实际上还提供了与C ++中的std::wstring
类似的固定宽度的字符串,从而可以方便地建立索引。它们现在位于https://github.com/JuliaStrings/LegacyStrings.jl中,需要先使用Pkg.add("LegacyStrings")
安装软件包。
UTF32String
是大多数用例的最佳选择。要从普通字符串构造UTF32String
,请执行以下操作:s2 = utf32(s)
。