SQLite UTF-8 output with fwrite


SQLite UTF-8 output with fwrite

我试图使用fwrite函数将从SQLite数据库读取的UTF-8文本输出到文本文件,但根本没有运气。

当我将内容回显到浏览器时,我可以毫无问题地阅读它。作为最后的手段,我在MySQL数据库中创建了相同的表,令人惊讶的是它成功了!

什么可能是原因,我如何调试这个,以便我可以使用SQLite数据库?

我正在使用PDO。

下面是我用来从DB读取和写入文件的代码:

$arFile = realpath(APP_PATH.'output/Arabic.txt');
$arfh = fopen($arFile, 'w');
$arTxt = '';
$key = 'somekey';
$sql = 'SELECT ot.langv AS orgv, et.langv AS engv, at.langv AS arbv FROM original ot   LEFT JOIN en_vals et ON ot.langk=et.langk
    LEFT JOIN ar_vals at ON ot.langk=at.langk
    WHERE ot.langk=:key';
$stm = $dbh->prepare($sql);
$stm->execute(array(':key'=>$key));
if( $row = $stm->fetch(PDO::FETCH_ASSOC) ){
    $arTxt .= '$_LANG["'.$key.'"] = "'.special_escape($row['arbv']).'";'."'n";
}
fwrite( $arfh, $arTxt);
fclose($arfh);

什么可能是原因,我如何调试这个,以便我可以使用SQLite数据库?

SQLite在接收文本时将文本存储到数据库中。因此,如果您将UTF-8编码的文本存储到SQLite数据库中,则可以从中读取UTF-8文本。

如果您将拉丁-1文本存储到数据库中,那么您可以从中读取拉丁-1文本。

SQLite本身并不关心。所以你付出什么就会得到什么。

正如您在浏览器中显示的问题中所写的那样,我认为至少有一些有效的编码值已存储在数据库中。当你查看这些数据的时候,你可能想看看你的浏览器,你的浏览器告诉你这些数据的编码是什么。

如果显示的是UTF-8,那么没问题。您可能只使用不支持UTF-8查看文件的编辑器来查看文本文件。因为fwrite也不关心编码,它只是把字符串数据放入文件,就是这样。

所以,只要你在问题中不提供额外的信息,就很难说出更具体的东西。

参见:如何在PHP中更改PDO/SQLite连接的字符编码?