>  기사  >  백엔드 개발  >  Go를 사용하여 Windows 콘솔에서 유니코드 문자열을 올바르게 출력하는 방법은 무엇입니까?

Go를 사용하여 Windows 콘솔에서 유니코드 문자열을 올바르게 출력하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-30 23:32:29530검색

How to Output Unicode Strings Correctly in Windows Consoles with Go?

Go를 사용하여 Windows 콘솔에서 유니코드 문자열을 올바르게 출력

Windows 콘솔에서 특수 문자가 포함된 UTF-8 문자열을 인쇄하는 Go 실행 파일로 작업하는 경우 Windows의 경우 Windows의 기본 IBM850 인코딩으로 인해 잘못된 출력이 발생할 수 있습니다. 이러한 인코딩 불일치로 인해 읽을 수 없는 문자가 뒤섞여 나타날 수 있습니다.

올바른 출력을 보장하려면 유니코드 문자열을 올바르게 처리하는 방법을 사용해야 합니다. 한 가지 접근 방식은 Windows의 kernel32.dll에서 제공하는 문서화되지 않은 메서드 WriteConsoleW를 활용하는 것입니다.

다음 Go 코드는 Windows 콘솔에서 유니코드 문자열을 올바르게 인쇄하는 방법을 보여줍니다.

<code class="go">import (
    "sync/atomic"
    "time"
)

func main() {
    handler := func(text []byte) {
        var prev []byte
        for {
            select {
            case s := <-strCh:
                if eq(prev, s) {
                    atomic.AddUint64(&skips, 1)
                    continue
                }

                time.Sleep(delay)
                prev = s
                r.add(s)
            default:
                time.Sleep(pollingDelay)
            }
        }
    }

    for i := 0; i < threads; i++ {
        go handler(data)
    }

    time.Sleep(timeout + 2e9)
    close(strCh)
    time.Sleep(2e9)
    m.printTotal(&report)
}</code>

여기서 script:

  • strCh 채널은 통신에 사용됩니다.
  • 여러 고루틴(스레드로 지정됨)이 동시에 채널에 씁니다.
  • r 속도 카운터는 쓰기 횟수를 계산합니다. 건너뛰기는 건너뛴 중복 쓰기 작업을 추적합니다.
  • 시간 초과에 도달할 때까지 루프가 계속된 다음 신호 종료를 위해 채널을 닫습니다.

최종 통계는 다음을 사용하여 인쇄됩니다. printTotal 메소드.

위 내용은 Go를 사용하여 Windows 콘솔에서 유니코드 문자열을 올바르게 출력하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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