zoukankan      html  css  js  c++  java
  • rune类型分析

    查询,官方的解释如下:

    1
    2
    3
    4
    5
    6
    7
    // rune is an alias for int32 and is equivalent to int32 in all ways. It is
    // used, by convention, to distinguish character values from integer values.
     
    //int32的别名,几乎在所有方面等同于int32
    //它用来区分字符值和整数值
     
    type rune = int32

      

    看代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package main
     
    import "fmt"
     
    func main() {
     
        var str = "hello 你好"
        fmt.Println("len(str):", len(str))
     
    }

      

    们猜测结果应该是:8:5个字符1个空格2个汉字。那么正确答案是多少呢?

    结果是 :12

    这是为什么呢?

    golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。

    解决方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ackage main
     
    import (
        "fmt"
        "unicode/utf8"
    )
     
    func main() {
     
        var str = "hello 你好"
     
        //golang中string底层是通过byte数组实现的,座椅直接求len 实际是在按字节长度计算  所以一个汉字占3个字节算了3个长度
        fmt.Println("len(str):", len(str))
         
        //以下两种都可以得到str的字符串长度
         
        //golang中的unicode/utf8包提供了用utf-8获取长度的方法
        fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))
     
        //通过rune类型处理unicode字符
        fmt.Println("rune:", len([]rune(str)))
    }

      

    golang中还有一个byte数据类型与rune相似,它们都是用来表示字符类型的变量类型。它们的不同在于:

    • byte 等同于int8,常用来处理ascii字符
    • rune 等同于int32,常用来处理unicode或utf-8字符

    原文:https://www.cnblogs.com/echojson/p/10746597.html

  • 相关阅读:
    Android之Handler
    错误一览表
    Android ImageView 的scaletype属性详细介绍 转
    Adobe Flash/Dreamweaver/Fireworks CS3 软件不能安装问题
    MySQL修改表属性的SQL语句
    Apache与Tomcat整合
    mySQL常用SQL语句技法
    今天第一次写博客
    Tomcat+JSP经典配置实例
    整合Apache+Tomcat服务器2
  • 原文地址:https://www.cnblogs.com/show58/p/12720041.html
Copyright © 2011-2022 走看看