我正在创建一个Java应用程序,我想用除英语之外的其他语言输入数据。例如。我想以印地语(UTF-8)字符输入数据。我已将数据转换为十六进制字符串'\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95'

但是,当我尝试使用convert_from将数据转换回Hindi时,出现以下错误:

select convert_from('\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95', 'UTF8') aa


错误:

ERROR:  invalid hexadecimal digit: "\"
LINE 1: select convert_from('\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x97\xe...
                            ^
********** Error **********

ERROR: invalid hexadecimal digit: "\"
SQL state: 22023
Character: 21


我正在使用Postgres。

最佳答案

您有几种选择。如果您的数据库已经在UTF8中(并且客户端编码也是UTF8),则只需使用Escape literals

select E'\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95'


当数据库不是UTF8(但客户端编码是UTF8)时,请使用convert_from()和转义文字:

select convert_from(E'\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95', 'UTF8')


如果您的数据库或客户端编码都不是UTF8,则将convert_from()decode()与简单文字一起使用:

convert_from(decode('e0a4a8e0a4bee0a497e0a4b0e0a4bfe0a495', 'hex'), 'UTF8')


http://rextester.com/SPGFDP50612

我已经将数据转换为十六进制字符串-无论如何,当您使用准备好的语句并将原始数据绑定为参数时,这些问题就不会出现。您的语言绑定应代替您处理转换。

10-07 22:41