sizeof()和slice操作的几点困惑

  • 如下图所示,我们定义str1,用sizeof查看其字节数为5 = 3 + 1+ 1
    image
  • 做切片操作,奇怪的事情出现了:
  1. str1[1] = '∀'; str1[4] = ' '; str1[5] = 'b'

  2. str1[2] 会报错 ERROR: StringIndexError("∀ b", 2),`str1[3]也是如此


  3. 而计算字符的字节数,结果也很奇怪:
    sizeof('∀') = 4; sizeof(' ') = 4; sizeof('b') = 4
    image

  • 困惑主要有以下几点:
  1. 做字符串切片操作的时候,为什么不是按字符(Char)编号,而是按字节(byte),这样不是会给切片操作带来诸多问题吗。

  2. sizeof(char::Char)返回的为什么不是字节数,返回的4又是什么;我也未找到sizeof(char::Char)调用的generic function

你的字符串包含unicode哟,不能按照C语言的思路把他吗全看作Ascii

可是julia也知道一个Unicode字符是多少个字节,一个字符串有多少个Unicode字符,为什么不按照字符取切片呢,这样不是更合理吗?

eachindex

嗯嗯,学到了 :+1:。julia是不是默认把所有字符都用四位的unicode来表示,而字符串则使用utf-8呢?

好像不是诶 :yum:

可是你看我试的那几个字符都是4位的诶

我感觉你理解错了吧,应该多看文档


sizeof(::Char)返回的好像就是字节数
你要找的应该是length(::Char)

1 个赞

sizeof 返回的就是字节数,但是同一个字符作为字符和单字符字符串的位数是不一样,所以我猜测字符都是用unicode编码的,所以都是4位:

刚才去slack问了一下,你的想法是正确的

谢谢!另外,slark是什么…

论坛,里面人挺多,就是要用英文

找见了 :wink: