在 Code 128 条形码中编码扩展的 ASCII 字符

4

我想在 Code 128 条形码中编码字符串 "QuiÑones"。是否可以在 Code 128 编码中包含扩展 ASCII 字符?

我在 Google 上进行了一些研究,发现可以通过使用 FNC4 实现,但我没有找到具体的方法。如果有人能帮助我用 C 语言解决这个问题,那将是非常有帮助的。


2
扩展ASCII是一个概念,而不是一个精确定义的事物。请确切指定您的编码方式。如果您正在寻求一个库来执行此操作,则属于离题讨论。 - David Heffernan
嗨,David,感谢您的评论,但我只想知道如何使用FNC4来编码扩展ASCII字符(例如特殊字符Ñ)。我不需要库,我已经有编码逻辑来编码128个ASCII值以下的字符。 这是维基参考:http://en.wikipedia.org/wiki/Code_128 - Mayuresh
3
正如我之前所说,扩展ASCII是一个概念,而不是一个精确定义的东西。你不能“编码为扩展ASCII”。你需要选择一个实际的编码方式。 - David Heffernan
1个回答

8
在 Code 128 编码中,字节值从 128 到 255 的 "扩展 ASCII" 字符可以使用特殊的 FNC4 功能字符来表示。对于一般用途(在开放应用程序中),这些扩展字符必须属于 ISO-8859-1(Latin1)字符集。
引用:
"FNC4 用于表示扩展字符集(字节值为 128 到 255),如 ISO/IEC 8859-1 中所指定... 如果使用单个 FNC4 字符,则将值 128 添加到符号中以下数据字符的 ISO/IEC 646 值... 后续数据字符恢复为标准的 ISO/IEC 646 集。如果使用两个连续的 FNC4 字符,则将值 128 添加到所有后续数据字符的 ISO/IEC 646 值,直到遇到另外两个连续的 FNC4 字符或达到符号的结尾。" —— ISO/IEC 15417 §4.3.4.2 (d)
实际上,单个 FNC4 字符切换下一个字符的高位(视为 8 位序数),而两个相邻的 FNC4 字符则切换后续字符的高位。
在您的例子“QuiÑones”中,字符“Ñ”用ISO-8859-1字节值209表示,因此为128 + 81。 ASCII 81解析为“Q”,因此您需要序列FNC4 Q来表示“Ñ”。
这些数据的有效Code 128编码如下:
[104/START-B] [49/Q] [85/u] [73/i] [100/FNC4] [49/Q] [79/o] [78/n] [69/e] [83/s] [93/check-digit] [106/STOP]

一些条形码应用程序和库将为您执行基于FNC4的扩展字符编码,如下面的示例所示。大多数不会这样做,但是这些应用程序可以让您直接指定一个FNC4字符,以便您可以使用上述技术手动驱动该过程,例如:Qui{FNC4}Qones Code 128符号如下所示:

Code 128 containing the word "QuiÑones"


3
FNC4字符类似于Unicode的专用区域代码点。Code 128并没有说明这些字符是什么。作者和读者需要就它们的含义达成一致。通常情况下,您会选择与定义明确的字符编码相同的数字值来编码字符。 "扩展ASCII"未被明确定义,"大多数代码页"也是如此。无论是使用已建立的字符编码还是自己编写编码,您都需要说明其含义。 - Tom Blodget
4
关于使用 FNC4,不正确。ISO/IEC 15417 §4.3.4.2 (d) 规定:"FNC4 用于表示扩展字符集(字节值为 128 到 255),如 ISO/IEC 8859-1 所指定...如果只使用一个 FNC4 字符,则在符号中的下一个数据字符的 ISO/IEC 646 值上加上 128 ... 后续数据字符回归到标准的 ISO/IEC 646 集。如果使用两个连续的 FNC4 字符,则在遇到另外两个连续的 FNC4 字符或符号的结尾之前,在所有后续数据字符的 ISO/IEC 646 值上加上 128。" - Terry Burton
关于“扩展ASCII”术语的使用,谢谢。我已经改进了答案,除了直接涉及问题的情况下,不再随意提到扩展ASCII,并明确指出Latin1字符集是开放应用程序所必需的。再次感谢。 - Terry Burton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接