diff --git a/src/Data/Hanzi.php b/src/Data/Hanzi.php index 58cc0838b..fdc30228b 100644 --- a/src/Data/Hanzi.php +++ b/src/Data/Hanzi.php @@ -30,7 +30,8 @@ use function chr, implode, is_string, mb_convert_encoding, mb_detect_encoding, final class Hanzi extends QRDataModeAbstract{ // GB2312, GB18030 - public const ENCODING = 'GB18030'; + public const ENCODING = 'GB18030'; + public const GB2312_SUBSET = 0b0001; // other subsets??? /** * @inheritDoc @@ -115,6 +116,7 @@ final class Hanzi extends QRDataModeAbstract{ $bitBuffer ->put($this::$datamode, 4) + ->put($this::GB2312_SUBSET, 4) ->put($this->getCharCount(), $this::getLengthBits($versionNumber)) ; diff --git a/tests/Data/DataInterfaceTestAbstract.php b/tests/Data/DataInterfaceTestAbstract.php index 5673095da..b130b8664 100644 --- a/tests/Data/DataInterfaceTestAbstract.php +++ b/tests/Data/DataInterfaceTestAbstract.php @@ -13,7 +13,7 @@ namespace chillerlan\QRCodeTest\Data; use chillerlan\QRCode\Common\{MaskPattern, Version}; use chillerlan\QRCode\QROptions; use PHPUnit\Framework\TestCase; -use chillerlan\QRCode\Data\{QRCodeDataException, QRData, QRDataModeInterface, QRMatrix}; +use chillerlan\QRCode\Data\{Hanzi, QRCodeDataException, QRData, QRDataModeInterface, QRMatrix}; use ReflectionClass; use function str_repeat; @@ -123,6 +123,10 @@ abstract class DataInterfaceTestAbstract extends TestCase{ $bitBuffer = $this->QRData->getBitBuffer(); // read the first 4 bits $this::assertTrue($bitBuffer->read(4) === $datamodeInterface->getDataMode()); + // hanzi mode starts with a subset indicator + if($datamodeInterface instanceof Hanzi){ + $this::assertTrue($bitBuffer->read(4) === Hanzi::GB2312_SUBSET); + } // decode the data /** @noinspection PhpUndefinedMethodInspection */ $this::assertSame($this->testdata, $this->FQN::decodeSegment($bitBuffer, $options->version));