| // $G $F.go && $L $F.$A && ./$A.out |
| |
| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import "utf8" |
| |
| func main() { |
| var chars [6] int; |
| chars[0] = 'a'; |
| chars[1] = 'b'; |
| chars[2] = 'c'; |
| chars[3] = '\u65e5'; |
| chars[4] = '\u672c'; |
| chars[5] = '\u8a9e'; |
| s := ""; |
| for i := 0; i < 6; i++ { |
| s += string(chars[i]); |
| } |
| var l = len(s); |
| for w, i, j := 0,0,0; i < l; i += w { |
| var r int; |
| r, w = utf8.DecodeRuneInString(s[i:len(s)]); |
| if w == 0 { panic("zero width in string") } |
| if r != chars[j] { panic("wrong value from string") } |
| j++; |
| } |
| // encoded as bytes: 'a' 'b' 'c' e6 97 a5 e6 9c ac e8 aa 9e |
| const L = 12; |
| if L != l { panic("wrong length constructing array") } |
| a := make([]byte, L); |
| a[0] = 'a'; |
| a[1] = 'b'; |
| a[2] = 'c'; |
| a[3] = 0xe6; |
| a[4] = 0x97; |
| a[5] = 0xa5; |
| a[6] = 0xe6; |
| a[7] = 0x9c; |
| a[8] = 0xac; |
| a[9] = 0xe8; |
| a[10] = 0xaa; |
| a[11] = 0x9e; |
| for w, i, j := 0,0,0; i < L; i += w { |
| var r int; |
| r, w = utf8.DecodeRune(a[i:L]); |
| if w == 0 { panic("zero width in bytes") } |
| if r != chars[j] { panic("wrong value from bytes") } |
| j++; |
| } |
| } |