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

Patricia Arquette
Release: 2024-10-30 23:32:29
Original
611 people have browsed it

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

Outputting Unicode Strings Correctly in Windows Consoles with Go

When working with Go executables that print UTF-8 strings containing special characters in Windows console windows, you may encounter mangled output due to Windows' default IBM850 encoding. This encoding mismatch can result in unreadable characters that appear scrambled.

To ensure proper output, it is necessary to employ a method that handles Unicode strings correctly. One approach is to utilize the undocumented method WriteConsoleW provided by Windows' kernel32.dll.

The following Go code demonstrates how to print Unicode strings correctly in a Windows console:

<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>
Copy after login

In this script:

  • A strCh channel is used for communication.
  • Multiple goroutines (specified by threads) concurrently write to the channel.
  • The r rate counter counts write operations, while skips keeps track of skipped redundant write operations.
  • The loop continues until reaching a timeout, and then closes the channel to signal termination.

The final statistics are printed using the printTotal method.

The above is the detailed content of How to Output Unicode Strings Correctly in Windows Consoles with Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template