問題:
Go 実行可能ファイルを使用して UTF-8 文字列を出力する場合Windows コンソールの場合、コンソールのデフォルトの IBM850 エンコーディングが原因で、出力が壊れる可能性があります。これにより、特殊文字が正しく表示されない可能性があります。
解決策:
Windows コンソールで正確な文字列出力を保証するには、次のコードを使用します:
<code class="go">// Alert: This method utilizes undocumented methods and does not handle stdout redirection or error checking. // Use with caution. package main import ( "syscall" "unicode/utf16" "unsafe" ) var modkernel32 = syscall.NewLazyDLL("kernel32.dll") var procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") func consolePrintString(strUtf8 string) { strUtf16 := utf16.Encode([]rune(strUtf8)) if len(strUtf16) == 0 { return } var charsWritten *uint32 syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(syscall.Stdout), uintptr(unsafe.Pointer(&strUtf16[0])), uintptr(len(strUtf16)), uintptr(unsafe.Pointer(charsWritten)), uintptr(0), 0) } func main() { consolePrintString("Hello ☺\n") consolePrintString("éèïöîôùòèìë\n") }</code>
このコードは、文書化されていない Windows API 関数を使用して、デフォルトのエンコードをバイパスして、UTF-16 でエンコードされた文字列をコンソールに直接書き込みます。このアプローチにより、特殊文字が正しく表示されるようになります。
使用法:
Go プログラムでは、consolePrintString 関数を直接呼び出して、正しく表示される UTF-8 エンコード文字列を出力できます。 Windows コンソールに表示されます。
以上がGo を使用して Windows コンソールで UTF-8 文字列を正しく印刷するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。