Some codes can be encoded entirely with code C, but Code128() initializes self._charset = "B" unconditionally.
Also, due to the (non-numeric) FNC 1 character at the start of a GS1 barcode, the library will always start with character set B anyway, even if self._charset was set to "C". WhyNotHugo/python-barcode@83a0b4e877/barcode/codex.py (L175)
The effect is that a switch to Code C is added after FNC 1, when it could have just started with character set C instead.
Expected (ignore the slash):
START C -> FNC 1 -> 12 -> 00 -> 13 -> 00 -> 85
image
Actual:
START B -> FNC 1 -> CODE C -> 12 -> 00 -> 13 -> 00 -> 85
gs128
import barcode
from barcode.writer import ImageWriter
sn = 1200130085
# START B -> FNC 1 -> CODE C -> barcode (code C)
code = barcode.get("gs1_128", str(sn), writer=ImageWriter())
code.save("gs128")
Some codes can be encoded entirely with code C, but Code128() initializes self._charset = "B" unconditionally.
Also, due to the (non-numeric) FNC 1 character at the start of a GS1 barcode, the library will always start with character set B anyway, even if self._charset was set to "C". https://github.com/WhyNotHugo/python-barcode/blob/83a0b4e87755f8dcb22c9cf35c52f6f3ae7a6993/barcode/codex.py#L175
The effect is that a switch to Code C is added after FNC 1, when it could have just started with character set C instead.
Expected (ignore the slash):
START C -> FNC 1 -> 12 -> 00 -> 13 -> 00 -> 85

Actual:
START B -> FNC 1 -> CODE C -> 12 -> 00 -> 13 -> 00 -> 85

```
import barcode
from barcode.writer import ImageWriter
sn = 1200130085
# START B -> FNC 1 -> CODE C -> barcode (code C)
code = barcode.get("gs1_128", str(sn), writer=ImageWriter())
code.save("gs128")
```