我是Julia的新手。在测试语言时,我得到了this error。
首先,我将字符串b
定义为"he§y"
。
当我在字符串中有“特殊”字符时,朱莉娅表现得很奇怪。
当我尝试获取b
的第三个字符(应该是'§')时,一切正常
但是,当我尝试获取b
的第四个字符(应该是'y')时,会抛出“ StringIndexError”。
答案 0 :(得分:4)
我不相信编译器会抛出错误。您的意思是运行时错误吗?
我对朱利安语言一无所知,但症状似乎与字符串索引有关,并不是基于代码点,而是基于某种编码。
Julia lang的文档似乎支持了我的假设:
https://docs.julialang.org/en/stable/manual/strings/
在Julia中用于字符串(和字符串文字)的内置具体类型为String。这通过 UTF-8编码支持所有Unicode字符。 (提供了转码功能,可以与其他Unicode编码进行相互转换。)
...
从概念上讲,字符串是从索引到字符的部分函数:对于某些索引值,不返回任何字符值,而是引发异常。这样可以通过编码表示形式的字节索引有效地索引到字符串中,而不是通过字符索引来有效地进行索引,而字符索引既不能有效地实现,也不能简单地用于Unicode字符串的可变宽度编码。
编辑:摘自Julia文档,该示例演示了您所面临的确切“问题”。
julia> s = "\u2200 x \u2203 y"
"∀ x ∃ y"
这些Unicode字符是显示为转义符还是显示为 特殊字符取决于终端的语言环境设置及其 支持Unicode。字符串文字使用UTF-8编码 编码。 UTF-8是可变宽度编码,这意味着并非所有 字符以相同的字节数编码。在UTF-8中,ASCII 字符-即代码点小于0x80(128)的字符- 使用单个字节以ASCII形式进行编码,而代码点 0x80及更高版本使用多个字节进行编码-每个字节最多四个 字符。这意味着并不是每个到UTF-8字符串的字节索引都是 必须是字符的有效索引。如果您索引到字符串 在这样的无效字节索引处,将引发错误:
julia> s[1]
'∀': Unicode U+2200 (category Sm: Symbol, math)
julia> s[2]
ERROR: StringIndexError("∀ x ∃ y", 2)
[...]
julia> s[3]
ERROR: StringIndexError("∀ x ∃ y", 3)
Stacktrace:
[...]
julia> s[4]
' ': ASCII/Unicode U+0020 (category Zs: Separator, space)