Estou tentando colar caracteres chineses no terminal psql:
$ psql
=> \encoding
=> UTF8
# Ctrl+v (艺术与设计)
=> ?????设计
Ao colar no terminal normal (Max OS), funciona bem:
$ # Ctrl+v (艺术与设计)
$ 艺术与设计
O que pode estar errado?
Estou tentando colar caracteres chineses no terminal psql:
$ psql
=> \encoding
=> UTF8
# Ctrl+v (艺术与设计)
=> ?????设计
Ao colar no terminal normal (Max OS), funciona bem:
$ # Ctrl+v (艺术与设计)
$ 艺术与设计
O que pode estar errado?
psql
delega a manipulação de entrada para uma biblioteca compartilhada, que élibreadline
oulibedit
.Mas
libedit
costumava não funcionar de forma confiável com conjuntos de caracteres multibyte, como foi relatado em várias ocasiões, aqui para OSX, por exemplo .Do seu comentário:
...parece que ao vincular novamente para uma versão mais recente, você conseguiu resolver o problema. Isso é útil saber.
A razão pela qual
libedit
é usado em tudo enquantolibreadline
fez um trabalho melhor primeiro é que o último é licenciado sob a GPL, enquantopsql
é licenciado por BSD como o resto do PostgreSQL. Uma conseqüência é quepsql
não pode ser enviado de forma compilada com as partes necessárias que chamamlibreadline
, sem violar sua licença. Por outro lado,libedit
usa a licença BSD, então não há problema em enviar com ela.A solução para os empacotadores do psql até agora tem sido enviar o PostgreSQL
libedit
e permitir que os usuários o reconectem,libreadline
se necessário.No Linux, os pacotes Debian/Ubuntu até fazem isso dinamicamente sem a intervenção do usuário.