2012-05-22 143 views
0

我有一个txt文件,我打开fopen阅读。然后我尝试使用转换Unicode(?)字符串

<xmp>... contents ... </xmp> 

一个行的读取像呼应屏幕的行:

"aut\xf3k\xf6lcs\xf6nz\xe9s budapest kauci\xf3 n\xe9lk\xfcl" 

谁能告诉我如何正确解码呢?

#!/usr/bin/php -q 
<?php 

$read_handle = fopen("somefile.txt", "r"); 
$write_handle = fopen("write.csv", "w"); 

if ($read_handle) { 
    while (($buffer = fgets($read_handle, 4096)) !== false) { 

      // Some modifications to the buffer here, converting it to CSV format 
      @fwrite($write_handle, $buffer."\n"); 

     } 

    } 
    if (!feof($read_handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    @fclose($read_handle); 
    @fclose($write_handle); 
} 

?> 

该脚本在命令行上运行,当我“尾巴”结果CSV时,它显示上面的编码。当我将CSV导入到MySQL时,它显示出相同的结果。 Similair在OpenOffice中打开CSV时。

TXT文件是从谷歌的BigQuery一个出口,使用以下命令

bq -q --format=pretty query "SELECT QUERY HERE" > somefile.txt 

你可能会想,为什么不直接让BigQuery的命令行工具输出一个CSV文件,但这是因为它触发了一些bug在系统中也有这个编码做...

+0

即编码不是Unicode;它可能是8859-1或8859-2。 – geoffspear

+0

在它们被转换为\ xXX之前,那些\ xXX字符是什么编码?我试过'$ s ='aut \ xf3k \ xf6lcs \ xf6nz \ xe9s'; echo preg_replace(“#(\\\\ x [0-9a-f] {2})#e”,“chr(hexdec('\\ 1'))”,$ s);'但似乎这个不是unicode ... – piotrekkr

回答

0

这听起来像是在BigQuery的CLI中的错误。默认情况下,字符串在UTF-8的路上和UTF-8在路上。然而,它似乎有一个打印问题在客户端结合Unicode和非Unicode字符串...

要仔细检查,这是一个客户端问题,可以通过标志“--apilog =”和检查消息请求/响应查询。如果回应是正确的,但客户打印的结果是错误的,那么这绝对是客户的问题。

如果您有一些示例数据可以上传和查询以重现此问题,请在http://code.google.com/p/google-bigquery-tools/issues/list处打开问题,以便我们确保解决您的特定问题。

谢谢!

0

注意与BigQuery的命令行工具,你可以从一个查询中创建一个新表,然后在查询导出为CSV。

# Run Query: 
bq query --destination_table=mydataset.baby_table "SELECT name,count FROM mydataset.babynames WHERE gender = 'M' ORDER BY count DESC LIMIT 6" 

# Extract data to CSV: 
bq extract mydataset.baby_table gs://mybucket/baby_table.csv