对Unicode的支持单元测试(Unit testing for unicode support)

2019-09-22 22:50发布

我想转换为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单元测试,并且是上述一些方法,可以进行修改,以解决这一目标?

Answer 1:

对不起,那是没有意义的。 您的测试文件是一个格式进行编码。 无论你放入测试字符串会以同样的方式被编码为文件。 我不会也要靠mb_detect_encoding功能。 让我们以下面的字符串:“ABCDE”。 它可以是ASCII或UTF-8。 你无法判断,因为没有特殊字符。 编码是一种方式,您如何过激数据。

//编辑

为了让您的测试工作做$this->assertTrue(mb_detect_encoding($original, 'UTF-8') === 'UTF-8')



文章来源: Unit testing for unicode support