概要
Go言語で全角と半角を相互変換するライブラリを作りました。
一括変換だけでなく部分変換もできるようにしました。
変換には内部で変換用のmapを使って実装しています。
GoのmapはO1(オーダ1)なので高速な変換が期待できます。
Denoバージョンもあります!
https://github.com/suwakei/deno-zhconv
記事もあります!
https://zenn.dev/keitosuwahara/articles/615ba85bb6c65b
ぜひREADME代わりに当記事を読んでみてください!
インストール
go get -u github.com/suwakei/go-zhconv/zhconv
機能
// H2zは、文字列中の半角文字を全角文字に変換した文字列を返します。
// ASCII,カタカナ,数字,濁点/半濁点付きカタカナを扱います。
func H2z(string) string
// H2zAtは半角から全角に変換した文字列を返します。
// 変換文字列は第2引数で選択できます。
func H2zAt(string, ...int) string
// Z2hは、文字列中の全角文字を半角文字に変換した文字列を返します。
// ASCII,カタカナ,数字,濁点/半濁点付きカタカナを扱います
func Z2h(string) string
// Z2hAtは全角から半角に変換した文字列を返します。
// 変換文字列は第2引数で選択できます。
func Z2hAt(string, ...int) string
使い方
H2zは、文字列中の半角文字を全角文字に変換した文字列を返します。
ASCII,カタカナ,数字,濁点/半濁点付きカタカナを扱います。
H2z関数
package main
import (
"fmt"
"github.com/suwakei/go-zhconv/zhconv"
)
func main() {
result = zhconv.H2z("Hello, world!")
fmt.Println(result) // Hello, world!.
result = zhconv.H2z("") // Empty string.
fmt.Println(result) // "".
result = zhconv.H2z("ABC123アイウガパ") // No conversion needed (Zenkaku).
fmt.Println(result) // ABC123アイウガパ.
result = zhconv.H2z("ABCdef XYZ!#$%&'()*+,-./:;<=>?@[¥]^_`{|}~ \\")
fmt.Println(result) // ABCdef XYZ!#$%&’()*+,-./:;<=>?@[¥]^_‘{|}~ \.
result = zhconv.H2z("0123456789") // Hankaku Digits to Zenkaku.
fmt.Println(result) // 0123456789.
result = zhconv.H2z("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン") // Hankaku Katakana to Zenkaku.
fmt.Println(result) // アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン.
result = zhconv.H2z("ァィゥェォッャュョ") // Hankaku Katakana (Small) to Zenkaku.
fmt.Println(result) // ァィゥェォッャュョ.
result = zhconv.H2z("。、・ー「」")// Hankaku Katakana (Symbols) to Zenkaku.
fmt.Println(result) // 。、・ー「」.
result = zhconv.H2z("ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ") // Hankaku Katakana with Dakuten to Zenkaku".
fmt.Println(result) // ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ.
result = zhconv.H2z( "パピプペポ") // Hankaku Katakana with Handakuten to Zenkaku.
fmt.Println(result) // パピプペポ.
result = zhconv.H2z("これはテストです。123 ABC アイウ ガギグ パピプ!") // Mixed Hankaku/Zenkaku/Other.
fmt.Println(result) // これはテストです。123 ABC アイウ ガギグ パピプ!.
result = zhconv.H2z(" スペース ") // convert from Half width space to Full width space.
fmt.Println(result) // スペース .
result = zhconv.H2z("ア゙イ゚ン゙") // Dakuten/Handakuten cannot be applied.
fmt.Println(result) // ア゛イ゜ン゛ Converted to full-width characters as separated( (ア->ア, ゙->゙).
result = zhconv.H2z("①②③㈱㈲") // Not convertible symbols.
fmt.Println(result) // It is assumed that environment dependent characters will not be converted.
result = zhconv.H2z("1バイト文字と2バイト文字が混在するテキスト。 ABC 123 ガギグパピプ!?") // Long string with various conversions.
fmt.Println(result) // 1バイト文字と2バイト文字が混在するテキスト。 ABC 123 ガギグパピプ!?.
}
Z2h関数
Z2hは、文字列中の全角文字を半角文字に変換した文字列を返します。
ASCII,カタカナ,数字,濁点/半濁点付きカタカナを扱います
package main
import (
"fmt"
"github.com/suwakei/go-zhconv/zhconv"
)
func main() {
result := zhconv.Z2h("Hello, world!")
fmt.Println(result) // "Hello, world!"
result = zhconv.Z2h("ABCdef XYZ!#$%&’()*+,-./:;<=>?@[¥]^_‘{|}~")
fmt.Println(result) // ABCdef XYZ!#$%&'()*+,-./:;<=>?@[¥]^_`{|}~
result = zhconv.Z2h("0123456789")
fmt.Println(result) // 0123456789
result = zhconv.Z2h("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン")
fmt.Println(result) // アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン
result = zhconv.Z2h("ァィゥェォッャュョ")
fmt.Println(result) // ァィゥェォッャュョ ヮ is not converted because there is no corresponding character for half-width.
result = zhconv.Z2h("。、・ー「」")
fmt.Println(result) // 。、・ー「」
result = zhconv.Z2h("ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ")
fmt.Println(result) // ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ
result = zhconv.Z2h("パピプペポ")
fmt.Println(result) // パピプペポ
result = zhconv.Z2h(" スペース ") // convert from Full width space to half width space
fmt.Println(result) // スペース
result = zhconv.Z2h("①②③㈱㈲") // It is assumed that environment dependent characters will not be converted.
fmt.Println(result) // ①②③㈱㈲
}
H2zAt関数
H2zAtは半角から全角に変換した文字列を返します。
変換文字列は第2引数で選択できます。
package main
import (
"fmt"
"github.com/suwakei/go-zhconv/zhconv"
)
func main() {
result = zhconv.H2zAt("Hello, world!", 0, 7)
fmt.Println(result) // Hello, world!.
result = zhconv.H2zAt("", 0) // Empty string.
fmt.Println(result) // "".
result = zhconv.H2zAt("ABC123アイウガパ", 0, 5) // No conversion needed (Zenkaku).
fmt.Println(result) // ABC123アイウガパ.
result = zhconv.H2zAt("ABCdef XYZ!#$%&'()*+,-./:;<=>?@[¥]^_`{|}~ \\", 3, 17)
fmt.Println(result) // ABCdef XYZ!#$%&'()*+,-./:;<=>?@[¥]^_`{|}~ \\.
result = zhconv.H2zAt("0123456789",0, 5) // Hankaku Digits to Zenkaku.
fmt.Println(result) // 0123456789.
result = zhconv.H2zAt("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン", 0) // Hankaku Katakana to Zenkaku.
fmt.Println(result) // アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン.
result = zhconv.H2zAt("ァィゥェォッャュョ", 0) // Hankaku Katakana (Small) to Zenkaku.
fmt.Println(result) // ァィゥェォッャュョ.
Z2hAt関数
Z2hAtは全角から半角に変換した文字列を返します。
変換文字列は第2引数で選択できます。
package main
import (
"fmt"
"github.com/suwakei/go-zhconv/zhconv"
)
func main() {
result := zhconv.Z2hAt("Hello, world!", 0, 7)
fmt.Println(result) // Hello, world!.
result = zhconv.Z2hAt("ABCdef XYZ!#$%&’()*+,-./:;<=>?@[¥]^_‘{|}~", 3, 17)
fmt.Println(result) // ABCdef XYZ!#$%&’()*+,-./:;<=>?@[¥]^_‘{|}~.
result = zhconv.Z2hAt("0123456789", 0, 5)
fmt.Println(result) // 0123456789.
result = zhconv.Z2hAt("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン", 0, 6, 9, 10)
fmt.Println(result) // アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン.
result = zhconv.Z2hAt("ァィゥェォッャュョ", 4)
fmt.Println(result) // ァィゥェォッャュョ.
}