以下是utf-8格式的示例csv文件,可以在win7的记事本中打开,中文字符显示正确,请下载。
http://pan.baidu.com/s/1sj0ia4H
打开cmd,然后设置chcp 650001。
C:\Users\pengsir>sqlite3 e:\\test.db
SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
sqlite> create table ipo(name TEXT,method TEXT);
sqlite> .separator ","
sqlite> .import "e:\\tmp.csv" ipo
sqlite> select * from ipo;
000001,公开招募
000002,申请表抽ç¾é™é¢è®¤è´
000004,定å‘å‘è¡Œ
000005,银行储蓄å˜å•æ–¹å¼
000006,申请表抽ç¾é™é¢è®¤è´
000007,自办å‘è¡Œ
000008,自办å‘è¡Œ
000009,定å‘å‘è¡Œ
000010,定å‘å‘è¡Œ
000011,申请表抽ç¾ç‰é¢è®¤è´
sqlite>
为什么同样的sqlite命令可以在sqlitemanager中正确显示? 如何设置在sqlite控制台中显示中文字符?
在pysqlite3中,它可以在python控制台中正确显示。
>>> import sqlite3
>>> con=sqlite3.connect("e:\\test.db")
>>> cur=con.cursor()
>>> cur.execute("select * from ipo;")
<sqlite3.Cursor object at 0x01751720>
>>> print(cur.fetchall())
[('000001', '公开招募'), ('000002', '申请表抽签限额认购'), ('000004', '定向发行'
), ('000005', '银行储蓄存单方式'), ('000006', '申请表抽签限额认购'), ('000007',
'自办发行'), ('000008', '自办发行'), ('000009', '定向发行'), ('000010', '定向发
行'), ('000011', '申请表抽签等额认购')]
>>>
答案 0 :(得分:5)
这个问题是如何构思的 Command Prompt window 显示字符,而不是如何sqlite3 打印输出;
在此处作为简单演示,我们绝对排除sqlite3
并按type command查看文件:
让我们看看在其他不同的O.S.中发生了什么,例如在OSX中:
ISO-8859-1
对应(Windows latino 1),windows等效代码页设置:chcp 819
UTF8
对应 Unicode(UTF-8),windows等效代码页设置:chcp 65001
在Windows中也会发生相同的行为:
使用命令chcp
检查和/或设置当前的代码页
注意:这是意大利Windows XP的屏幕截图,你可以看到仍然没有运气! :-(,在这种情况下,原因在于可配置的可用字体泄漏
我的“Windows XP”框中的command prompt properties
:
我希望这不是你的“Windows 7”框的情况(但如果是的话,请留下评论,以便在答案的这一部分更具体)。
..当问题切换到“可用字体”时,将安装其他语言支持,仍然需要chcp 65001
强制UTF-8:
按照我在ITA WinXP SP2上获得结果的步骤列表,如上面的屏幕截图所示:
讲座链接:to install East Asian language files on your computer
总之,这两个选项都已经过检查 在“高级标签”中,我选择了中文:
记事本对某些字体检查非常有用,例如打开temp.csv并使用字体,但要注意:Necessary criteria for fonts to be available in a command window
答案 1 :(得分:1)
显而易见的问题是Windows(一般来说)在处理UTF-8时存在问题。特别是命令行工具默认设置为特定于国家/地区的代码页而不是unicode。
通常可以通过将命令行会话的代码页设置为utf-8来(临时)修复它,例如键入:
chcp 65001
但问题是,在你的情况下,这并没有真正解决它,因为sqlite似乎仍然使用默认的字符集运行,并且似乎没有任何选项将当前的sqlite3会话设置为unicode。
首要的好消息是,您的数据是正确的,您可以使用sqlitemanager或类似的工具正确使用它,它们能够正确处理unicode。
进一步证实这一点:如果你用Excel打开原来的csv,它可能也会给你搞乱的字符(因为它通常不会默认为unicode)。而LibreOffice通常会要求您使用编码,并且给定unicode将显示正确的文本,但是给定不同的编码(例如:西欧等)会给您与excel相同的结果(您可以在那里预览它)很好,试一试。)
希望这有帮助!