Excel连接PostgreSQL时如何获取UTF-8编码字符串?
解决Excel连接PostgreSQL时获取UTF-8字符串的问题
嗨,我来帮你搞定这个UTF-8编码的问题!结合你已经完成的操作,下面是几个关键的解决步骤:
1. 检查并修改ODBC DSN的编码配置
打开ODBC数据源管理器(注意和你的Excel位数匹配:32位Excel找C:\Windows\SysWOW64\odbcad32.exe,64位找C:\Windows\System32\odbcad32.exe),找到你创建的PostgreSQL系统DSN,点击「配置」:
- 在配置界面里找到「Encoding」(或「字符集」)选项,直接选择
UTF8或者UNICODE,保存设置。
2. 在连接字符串中强制指定客户端编码
如果DSN的配置没生效,你可以直接在连接字符串里添加编码参数,修改你的VBA代码如下:
Public Function setDBConnectionPgsql() As Object Set setDBConnectionPgsql = CreateObject("ADODB.Connection") ' 新增ClientEncoding=UTF8参数,强制驱动用UTF-8传输数据 setDBConnectionPgsql.Open "DSN=PostgreSQL;Server=192.168.1.10;Port=5434;UserId=postgres;Password=123456;Database=test;ClientEncoding=UTF8;" End Function
3. 确保Excel单元格格式支持UTF-8
读取数据到Excel时,尽量把目标单元格的格式设置为文本格式,避免Excel自动转换编码导致乱码。如果是批量写入,可以先把整列格式设为文本再写入数据。
4. 验证驱动位数匹配
这个是很多人忽略的坑:如果你的Excel是32位版本,必须安装32位的PostgreSQL ODBC驱动;如果是64位Excel,就装64位驱动。位数不匹配不仅可能导致连接失败,也会引发编码异常。
如果按照上面的步骤操作后还有乱码,可以在读取字段值时用StrConv函数做一次编码转换,比如:
' 假设rs是你的ADODB.Recordset对象 Dim utf8Str As String utf8Str = StrConv(rs.Fields("your_column_name").Value, vbUnicode) Range("A1").Value = utf8Str
内容的提问来源于stack exchange,提问作者D T
相关产品推荐
相关产品推荐

