相关疑难解决方法(0)

如何使用菱形运算符(<>)读取UTF-8?

我想在Perl中读取UTF-8输入,无论它来自标准输入还是来自文件,使用菱形运算符:while(<>){...}.

所以我的脚本应该像往常一样以这两种方式调用,给出相同的输出:

./script.pl utf8.txt
cat utf8.txt | ./script.pl
Run Code Online (Sandbox Code Playgroud)

但产出不同!只有第二次调用(使用cat)似乎按设计工作,正确读取UTF-8.这是脚本:

#!/usr/bin/perl -w

binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';

while(<>){
    my @chars = split //, $_;
    print "$_\n" foreach(@chars);
}
Run Code Online (Sandbox Code Playgroud)

在两种情况下如何才能正确读取UTF-8?<>如果可能的话,我想继续使用钻石操作员进行阅读.

编辑:

我意识到我应该描述不同的输出.我的输入文件包含以下序列:a\xCA\xA7b.cat正确输出的方法:

a
\xCA\xA7
b
Run Code Online (Sandbox Code Playgroud)

但另一种方法给了我这个:

a
\xC3\x8A
\xC2\xA7
b
Run Code Online (Sandbox Code Playgroud)

unicode perl input utf-8

42
推荐指数
3
解决办法
1万
查看次数

如何在sqlite控制台中正确显示中文字符?

以下是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>
Run Code Online (Sandbox Code Playgroud)

为什么相同的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', …
Run Code Online (Sandbox Code Playgroud)

sqlite

2
推荐指数
1
解决办法
2605
查看次数

标签 统计

input ×1

perl ×1

sqlite ×1

unicode ×1

utf-8 ×1