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