Unicode 星期二的问题(外语字符串索引)

Unicode 星期二的问题(外语字符串索引),unicode,julia,Unicode,Julia,这里有一个可能是土耳其语拼错的单词“星期二”: “切金奇·戈恩”。拼写对这个问题无关紧要。我的问题是: s = "Çkinci" srev = reverse(s) for i in 1:length(srev) println(srev[i]) end 有效,但是 for i in 1:length(s) println(s[i]) end 第二个字母上的错误。事实上,不能在位置2的字母k处对切金奇(而不是其反向字符串)进行索引 有人知道为什么吗?“切克”是Unicode

这里有一个可能是土耳其语拼错的单词“星期二”:
“切金奇·戈恩”
。拼写对这个问题无关紧要。我的问题是:

s =  "Çkinci"
srev = reverse(s)
for i in 1:length(srev)
    println(srev[i])
end
有效,但是

for i in 1:length(s)
    println(s[i])
end
第二个字母上的错误。事实上,不能在位置2的字母k处对切金奇(而不是其反向字符串)进行索引


有人知道为什么吗?“切克”是Unicode转义序列还是什么?

Julia使用UTF-8编码字符串。实际上,字符
'ch'
需要2个字节。所以你应该写:

julia> for v in s
           println(v)
       end
Ç
k
i
n
c
i
您可以在此处阅读有关字符串索引的详细信息:

反向
版本之所以有效,是因为字符
k
i
n
c
i
都是ASCII码,只占用1个字节,所以在完成之前,您没有命中多字节字符,而且是偶然的
length
(返回字符串中的字符数)等于6,这是
倒档中
的位置。但是,实际上您的字符串需要7个字节,您可以通过调用:

julia> ncodeunits(s)
7

julia> sizeof(s)
7

julia> length(s)
6
编辑: 在Julia中,字符串在调用
getindex
时使用字节索引而不是字符索引。这是出于性能原因,如在UTF-8中,细化第n个字符索引的成本为O(n)


如果要获取字符串
s
write
nextind(s,0,i)
中第个字符的字节索引
i
。例如,
s[nextind(s,0,i)]
将返回字符串
s
中的第个字符
i
。请注意,仅当希望从字符串中获取一个字符时,才应使用它。如果需要多个字符串,那么在字符串上使用迭代会更有效。

这个问题确实需要索引,所以我必须进行拆分(“切金奇”,“切金奇”)为了使其可索引,我认为。如果您的问题需要索引,请使用
nextind
prevind
函数来获取字符串中连续的有效索引。如果您需要字符索引,而不是字节索引(由
nextind
/
prevind
返回),只需在枚举中为(I,c)编写
获取索引和字符。