10

列の長さが固定されているファイルの読み取り中に問題が発生しました。一部の列にはウムラウトが含まれる場合があります。

ウムラウトは、1 バイトではなく 2 バイトを使用しているようです。これは私が期待していた動作ではありません。部分文字列を返す関数はありますか? この場合、スライスは機能しないようです。

サンプルコードは次のとおりです。

http://play.golang.org/p/ZJ1axy7UXe

umlautsString := "Rhön"
fmt.Println(len(umlautsString))
fmt.Println(umlautsString[0:4])

版画:

5
Rhö
4

3 に答える 3

3

次のように変換stringして操作できます[]rune

package main

import "fmt"

func main() {
  umlautsString := "Rhön"

  fmt.Println(len(umlautsString))

  subStrRunes:= []rune(umlautsString)

  fmt.Println(len(subStrRunes))

  fmt.Println(string(subStrRunes[0:4]))
}

http://play.golang.org/p/__WfitzMOJ

それが役立つことを願っています!

于 2013-10-17T16:42:10.217 に答える
0

別のオプションはutf8stringパッケージです:

package main
import "golang.org/x/exp/utf8string"

func main() {
   s := utf8string.NewString("")
   // example 1
   n := s.RuneCount()
   println(n == 5)
   // example 2
   t := s.Slice(0, 2)
   println(t == "")
}

https://pkg.go.dev/golang.org/x/exp/utf8string

于 2021-04-19T02:44:43.580 に答える