>  기사  >  백엔드 개발  >  Go 문자열에서 악센트를 효율적으로 제거하는 방법은 무엇입니까?

Go 문자열에서 악센트를 효율적으로 제거하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 20:09:31859검색

How to Efficiently Remove Accents from Go Strings?

Go 문자열: 악센트 제거

Go에서는 문자열에서 악센트를 제거하고 악센트가 없는 해당 문자로 변환하는 것이 특별한 과제입니다. 다음은 문제에 대한 탐색과 잠재적인 해결책입니다.

이 문제를 해결하기 위한 한 가지 시도에는 "Performing Magic"이라는 제목의 블로그에 제공된 예를 기반으로 한 기능 구현이 포함됩니다. 이 예에는 unicode/norm 및 text/transform 패키지의 사용이 포함됩니다.

<code class="go">package main

import (
    "bytes"
    "code.google.com/p/go.text/transform"
    "code.google.com/p/go.text/unicode/norm"
    "fmt"
    "unicode"
)

func isMn(r rune) bool {
    return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks
}

func main() {
    r := bytes.NewBufferString("Your Śtring")
    t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC)
    r = transform.NewReader(r, t)
    fmt.Println(r)
}</code>

그러나 이 구현에는 제한이 없습니다. 최신 버전의 Go(1.5 이상)에는 기능에 영향을 미칠 수 있는 변경 사항이 도입되었습니다.

Go 1.5 및 룬 패키지

Go 1.5에는 룬 패키지가 도입되었습니다. 악센트 제거 프로세스.

<code class="go">func Remove() transform.Transformer</code>

제거 기능은 일련의 유니코드 범주 코드를 허용하며 변환된 문자열에서 해당 범주에 속하는 모든 룬을 제거합니다. 예를 들어 공백 없음 표시(Mn)를 제거하려면 다음을 사용할 수 있습니다.

<code class="go">t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)</code>

이 변환 체인은 악센트가 있는 문자를 악센트가 없는 해당 문자로 변환하여 악센트 제거를 위한 보다 효과적이고 간결한 솔루션을 만듭니다. 가세요.

위 내용은 Go 문자열에서 악센트를 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.