1

我正在尝试转换为 unicode 并创建一些单元测试以确保 unicode 正常工作。

这是我当前的代码,它在 mb_detect_encoding() 行上失败,我也不确定它是否是对 unicode 支持的有效测试:

    function testMultiLingualEncodings(){
        // Create this string via a heredoc.
        $original = '
        A good day, World!
Schönen Tag, Welt!
Une bonne journée, tout le monde!
يوم جيد، العالم
좋은 일, 세계!
Một ngày tốt lành, thế giới!
こんにちは、世界!
'; // Contains international characters from utf-8
        $this->assertTrue(mb_detect_encoding($original, 'UTF-8', true) === true); // Fails regardless of whether strict is true or not.
        $returned = query_item("select :multi limit 10", array(':multi'=>$original)); // Select this exact string, parameterized, from the database
        //debug($returned, string_diff($returned, $original));
        $this->assertTrue((bool)$original); // test original isn't null.
        $this->assertTrue((bool)$returned); // Test returned string isn't null.
        $this->assertTrue($original === $returned); // Test original exactly matches returned string
    }

所以 mb_detect_encoding() 表示上面的初始字符串不是 UTF-8。我也在尝试将该字符串传递到数据库中并将其取出,然后与原始字符串进行比较。但是,我不确定这是否是对数据库连接编码的有效测试。

所以总的来说,我怎样才能为 utf-8 支持创建一个单元测试,上面的方法是否可以修改来解决这个目标?

4

1 回答 1

3

对不起,但这没有意义。您的测试文件以一种格式编码。您放入测试字符串的任何内容都将以与文件相同的方式进行编码。我也不会依赖 mb_detect_encoding 函数。让我们采用以下字符串:“abcde”。它可以是 ASCII 或 UTF-8。你无法判断,因为没有特殊字符。编码是一种节制数据的方式。

//编辑

使您的测试工作完成$this->assertTrue(mb_detect_encoding($original, 'UTF-8') === 'UTF-8')

于 2012-09-24T22:50:54.853 回答