zsa*_*lya 6 ascii character diacritics julia
处理超出 1-127 范围的 ASCII 字符很容易使 Julia 崩溃。
\nmystring = "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\nRun Code Online (Sandbox Code Playgroud)\n给我
\n1:::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 \nRun Code Online (Sandbox Code Playgroud)\n它在输出正常范围之外的第一个字符后崩溃,而不是在输出期间崩溃,这在字符串索引错误(Julia)
的答案中提到\n如果在 Julia 中声明值,应该将它们声明为 Unicode,但我有这些字符在我的输入中。
\n手册说 Julia 会查看语言环境,但是是否存在“无处不在”的语言环境?
\n
\n是否有某种方法可以在 Julia 中处理这些字符的输入和输出?
我正在使用 Windows10,但如果 Linux 更适合我,我可以切换到 Linux。
\n用于eachindex获取字符串中有效索引的列表:
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\nRun Code Online (Sandbox Code Playgroud)\n您的问题与 Julia 使用字符串的字节索引这一事实有关,如Julia Manual 中所述。
\n例如,字符\xc3\x80占用两个字节,因此,由于其位置是 7,因此下一个索引是 9 而不是 8。
在 Julia 默认使用的 UTF-8 编码中,仅 ASCII 字符占用 1 个字节,所有其他字符占用 2、3 或 4 个字节,请参阅https://en.wikipedia.org/wiki/UTF-8#Encoding。
\n例如,\xc3\x80您得到两个字节:
julia> codeunits("\xc3\x80")\n2-element Base.CodeUnits{UInt8, String}:\n 0xc3\n 0x80\nRun Code Online (Sandbox Code Playgroud)\n我还在https://bkamins.github.io/julialang/2020/08/13/strings.html上写了一篇文章,试图解释 Julia 中字节索引与字符索引的工作原理。
\n如果您还有其他问题请评论。
\n