Julia:如何读入和输出带变音符号的字符?

zsa*_*lya 6 ascii character diacritics julia

处理超出 1-127 范围的 ASCII 字符很容易使 Julia 崩溃。

\n
mystring = "A-Za-z\xc3\x80-\xc3\xbf\xc5\xbd\xc5\xbe"\nfor i in 1:length(mystring)\n    print(i,":::")\n    print(Int(mystring[i]),"::" )\n    println(  mystring[i]       )\nend\n
Run Code Online (Sandbox Code Playgroud)\n

给我

\n
1:::65::A\n2:::45::-\n3:::90::Z\n4:::97::a\n5:::45::-\n6:::122::z\n7:::192::\xc3\x80\n8:::ERROR: LoadError: StringIndexError("A-Za-z\xc3\x80-\xc3\xbf\xc5\xbd\xc5\xbe", 8)\nStacktrace:\n [1] string_index_err(::String, ::Int64) at .\\strings\\string.jl:12\n [2] getindex_continued(::String, ::Int64, ::UInt32) at .\\strings\\string.jl:220\n [3] getindex(::String, ::Int64) at .\\strings\\string.jl:213\n [4] top-level scope at R:\\_LV\\STZ\\Web_admin\\Languages\\Action\\Returning\\chars.jl:5\n [5] include(::String) at .\\client.jl:457\n [6] top-level scope at REPL[18]:1 \n
Run Code Online (Sandbox Code Playgroud)\n

它在输出正常范围之外的第一个字符后崩溃,而不是在输出期间崩溃,这在字符串索引错误(Julia)
的答案中提到\n如果在 Julia 中声明值,应该将它们声明为 Unicode,但我有这些字符在我的输入中。
\n手册说 Julia 会查看语言环境,但是是否存在“无处不在”的语言环境?
\n
\n是否有某种方法可以在 Julia 中处理这些字符的输入和输出?

\n

我正在使用 Windows10,但如果 Linux 更适合我,我可以切换到 Linux。

\n

Bog*_*ski 6

用于eachindex获取字符串中有效索引的列表:

\n
julia> mystring = "A-Za-z\xc3\x80-\xc3\xbf\xc5\xbd\xc5\xbe"\n"A-Za-z\xc3\x80-\xc3\xbf\xc5\xbd\xc5\xbe"\n\njulia> for i in eachindex(mystring)\n           print(i, ":::")\n           print(Int(mystring[i]), "::")\n           println(mystring[i])\n       end\n1:::65::A\n2:::45::-\n3:::90::Z\n4:::97::a\n5:::45::-\n6:::122::z\n7:::192::\xc3\x80\n9:::45::-\n10:::255::\xc3\xbf\n12:::381::\xc5\xbd\n14:::382::\xc5\xbe\n
Run Code Online (Sandbox Code Playgroud)\n

您的问题与 Julia 使用字符串的字节索引这一事实有关,如Julia Manual 中所述。

\n

例如,字符\xc3\x80占用两个字节,因此,由于其位置是 7,因此下一个索引是 9 而不是 8。

\n

在 Julia 默认使用的 UTF-8 编码中,仅 ASCII 字符占用 1 个字节,所有其他字符占用 2、3 或 4 个字节,请参阅https://en.wikipedia.org/wiki/UTF-8#Encoding

\n

例如,\xc3\x80您得到两个字节:

\n
julia> codeunits("\xc3\x80")\n2-element Base.CodeUnits{UInt8, String}:\n 0xc3\n 0x80\n
Run Code Online (Sandbox Code Playgroud)\n

我还在https://bkamins.github.io/julialang/2020/08/13/strings.html上写了一篇文章,试图解释 Julia 中字节索引与字符索引的工作原理。

\n

如果您还有其他问题请评论。

\n