String 字符串索引错误(Julia)
我是朱莉娅的新手。当我测试语言的时候,我得到了 首先,我将字符串String 字符串索引错误(Julia),string,julia,String,Julia,我是朱莉娅的新手。当我测试语言的时候,我得到了 首先,我将字符串b定义为“he§y” 当我在字符串中有“特殊”字符时,朱莉娅的行为似乎很奇怪 当我试图获取b的第三个字符(应该是§)时,一切都正常 但是,当我试图获取b的第四个字符(应该是“y”)时,会抛出一个“StringIndexer”。我不相信编译器会抛出错误。你的意思是运行时错误吗 我对朱利安语言一无所知,但症状似乎与字符串的索引相关,而不是基于代码点,而是一些编码 Julia lang的文件似乎支持我的假设: Julia中用于字符串(和
b
定义为“he§y”
当我在字符串中有“特殊”字符时,朱莉娅的行为似乎很奇怪
当我试图获取b
的第三个字符(应该是§)时,一切都正常
但是,当我试图获取
b
的第四个字符(应该是“y”)时,会抛出一个“StringIndexer”。我不相信编译器会抛出错误。你的意思是运行时错误吗
我对朱利安语言一无所知,但症状似乎与字符串的索引相关,而不是基于代码点,而是一些编码
Julia lang的文件似乎支持我的假设:
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 lang的文件似乎支持我的假设: 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字符串的字节索引都是
必须是字符的有效索引。如果你索引成一个字符串
在这样一个无效的字节索引处,将抛出一个错误:
下一次,请发布一篇文章来演示您的问题。它让每个人的生活都变得更轻松。我已经把你诊断我的问题所需的所有信息都放进去了……仅仅是几行代码就可以重现你的问题,这比你“提供所有信息”的方式要清晰得多。我们甚至看不到您是如何迭代字符串的。而且,正如你在其他评论中所说的那样,你说我的回答与此无关:从你的描述中,我看到的正是问题所在:对于字符串
“he§y”
,s[1]
会给你h
,s[3]
应该给你§
,而s[4]
会给你字符串索引错误。如果看不到你的代码,我们无法告诉你更多。可能是您没有正确声明字符串。您应该使用\u
处理字符串文字中的非ASCII字符。您似乎不熟悉StackOverflow的工作原理:您可以编辑您的问题(通过单击问题末尾的“编辑”),以提供额外的信息(最好是简洁的代码段)查看。下次,请发布一篇文章来演示您的问题。它让每个人的生活都变得更轻松。我已经把你诊断我的问题所需的所有信息都放进去了……仅仅是几行代码就可以重现你的问题,这比你“提供所有信息”的方式要清晰得多。我们甚至看不到您是如何迭代字符串的。而且,正如你在其他评论中所说的那样,你说我的回答与此无关:从你的描述中,我看到的正是问题所在:对于string“he§y”
,s[1]
会给你h
,s[3]
应该给你§
,而s[4]