Как напечатать символы UTF-8 (или Unicode) в Go (golang) в Windows - PullRequest
0 голосов
/ 23 октября 2018

Давайте посмотрим на это:

✓ Hello, 世界

Как вы можете видеть, есть галочка Юникода и китайские / японские символы.На самом деле, если я использую MSYS или Linux, я могу легко напечатать эти символы.Даже на окнах.Однако я не могу их видеть ни в CMD, ни в Powershell.

Я получил это:

powershell

Этоэто мой очень простой код:

package main

import (
    "fmt"
)

func main() {

    fmt.Println("✓ Hello, 世界")
    // OR
    fmt.Println("\u2713 Hello, 世界")
}

Кроме того, у меня есть десятки консольных приложений, и они могут отображать такие символы в моих окнах с помощью cmd или powershell.Почему идти не может?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Проблема для консолей Windows cmd и PowerShell заключается в отсутствии символов CJK в таких шрифтах, как Consolas и Lucida Console.В Windows 10 измените шрифт консоли на шрифт, который поддерживает символы CJK, например NSimSun или SimSun-ExtB.

Например,

font.go:

package main

import (
    "fmt"
)

func main() {
    fmt.Println("✓ Hello, 世界")
    // OR
    fmt.Println("\u2713 Hello, 世界")
}

Выход (NSimSun):

Microsoft Windows [Version 10.0.17134.345]
>go version
go version devel +47cc59f31f Tue Oct 23 00:29:57 2018 +0000 windows/amd64
>go run font.go
✓ Hello, 世界
✓ Hello, 世界
>
0 голосов
/ 23 октября 2018

Попробуйте запустить в Windows PowerShell ISE .

Имеет довольно хорошую поддержку отображения Unicode.

CMD и PowerShell не поддерживают Unicode-шрифты в оболочка командной строки очень хорошо, потому что они на самом деле не используют "шрифты" для отображения текста, а кодовые страницы ANSI / VT, которые переводятся в символы.Таким образом, несмотря на то, что PowerShell поддерживает внутреннюю поддержку Юникода, и вы можете передавать их между объектами и функциями, оболочка командной строки просто не может их отобразить, поскольку перевода между кодовой страницей и отображением не существует.Некоторые попытки сделать Unicode немного лучше можно найти здесь: Отображение Unicode в Powershell

Интересное прочтение о том, почему CMD и PowerShell не могут хорошо работать с Unicode, см. В серии постов в блоге.: Командная строка Windows: внутри консоли Windows

Windows PowerShell ISE отличается от запуска PowerShell из оболочки командной строки , поскольку ISE отображает выходные данные и не отображает их.не нужно использовать последовательности ANSI / VT для передачи команд между оболочкой и консольным хостом PowerShell.И у него нет старых сценариев, с которыми нужно иметь дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...