iT邦幫忙

DAY 29
1

蠻可愛的 Golang系列 第 29

Golang 與 unicode

Golang是使用unicode,所以前面我們的例子,
函數,物件,方法,變數都大量採用中文方式來表示.
讓程式更生動.

今天來介紹一下unicode的處理.

來看下面的例子:

// hello81
package main

import (
	"fmt"
)

func main() {
	str := "能解此愁,唯有杜康!"
	fmt.Printf("string: %s\n", str)
	fmt.Println("String length:", len([]rune(str)))
	fmt.Println(" Bytes length:", len(str))
	fmt.Println("------------------------------------")
	fmt.Println("cnt index    rune     char    bytes")
	fmt.Println("------------------------------------")
	cnt := 0
	for index, char := range str {
		cnt++
		fmt.Printf("%-2d   %-2d      %U    %2c    %X\n",
			cnt, index, char, char, []byte(string(char)))
	}
}

執行結果:

./hello81 
string: 能解此愁,唯有杜康!
String length: 10
 Bytes length: 26
------------------------------------
cnt index    rune     char    bytes
------------------------------------
1    0       U+80FD    能    E883BD
2    3       U+89E3    解    E8A7A3
3    6       U+6B64    此    E6ADA4
4    9       U+6101    愁    E68481
5    12      U+002C     ,    2C
6    13      U+552F    唯    E594AF
7    16      U+6709    有    E69C89
8    19      U+675C    杜    E69D9C
9    22      U+5EB7    康    E5BAB7
10   25      U+0021     !    21

解說:
在Golang中引進新的名詞rune,Unicode字串,實際上就是rune組成的
array.
所以上面的句子,連標點符號一共10個字.
用len()查,會是bytes,標點符號只用1個byte,
中文字用3個bytes,一共
1x2 + 3x8 = 26
要計算多少字,就要用 len([]rune(str))) 這樣的方式才能得到正確值.

接著逐一把str裡的內容,顯示出來,可以好好觀察.
cnt 是為了方便大家計算第幾個字,顧及到一般習慣,
所以是從1起算.
可以觀察到index 是0到25, 剛好26 bytes.
也可以看到每個中文字3個bytes,與標點符號1個byte.


上一篇
Golang 輸出PNG檔
下一篇
蠻可愛的 Golang
系列文
蠻可愛的 Golang30

尚未有邦友留言

立即登入留言