【问题标题】:Encode extended ASCII characters in a Code 128 barcode在 Code 128 条码中编码扩展的 ASCII 字符
【发布时间】:2014-02-23 20:54:57
【问题描述】:

我想在 Code 128 条形码中对字符串“QuiÑones”进行编码。是否可以在 Code 128 编码中包含扩展的 ASCII 字符? .

我在 Google 上做了一些研究,表明可以使用 FNC4,但我没有找到确切的方法。如果有人能用 C 语言帮助我解决问题,那将是非常有帮助的。

【问题讨论】:

  • 扩展 ASCII 是一个概念,而不是一个精确定义的东西。请准确指定您的编码。如果你要求图书馆来做这件事,那就离题了。
  • 嘿大卫谢谢你的评论,但我只是想知道我们如何使用 FNC4 来编码这样的扩展 ASCII 字符(特殊字符,如 Ñ)。我不是在寻找库,我已经有了用于将字符编码为 128 个 ASCII 值的编码逻辑。这是维基参考:en.wikipedia.org/wiki/Code_128
  • 好吧,正如我已经说过的,扩展 ASCII 是一个概念,而不是一个精确定义的东西。您不能“编码为扩展的 ASCII”。您需要选择一个实际的编码。

标签: c barcode non-ascii-characters extended-ascii code128


【解决方案1】:

字节值从 128 到 255 的“扩展 ASCII”字符确实可以使用特殊的 FNC4 功能字符在 Code 128 编码中表示。对于一般用途(在开放式应用程序中),此类字符必须属于 ISO-8859-1 (Latin1) 字符集。

单个 FNC4 字符充当下一个字符到扩展字符集的转换,而两个连续的 FNC4 字符充当锁存器。效果是切换受影响字符的 8 位 ASCII 值的高位(基本上是加减 128)。

在您的示例“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 符号如下所示:

【讨论】:

  • FNC4 字符类似于 Unicode 的私人使用区域代码点。代码 128 没有说明字符是什么。作者和读者必须就他们的意思达成一致。通常,您会选择数值来对字符进行编码,就像在明确定义的字符编码中一样。 “扩展 ASCII”没有明确定义; “大多数代码页”也不是。无论是使用既定的字符编码还是编造一个,你仍然可以说它是什么。
  • 关于 FNC4 的使用,不正确。 ISO/IEC 15417 §4.3.4.2 (d):“FNC4 用于表示 ISO/IEC 8859-1 中规定的扩展字符集(字节值 128 到 255)......如果使用单个 FNC4 字符,则将值 128 添加到符号中以下数据字符的 ISO/IEC 646 值 ... 后续数据字符恢复为标准 ISO/IEC 646 集。如果使用两个连续的 FNC4 字符,则将值 128 添加到所有后续数据字符的 ISO/IEC 646 值,直到遇到另外两个连续的 FNC4 字符或到达符号末尾。"
  • 关于“扩展 ASCII”一词的使用,谢谢。我通过删除对扩展 ASCII 的随意引用来改进答案,除了直接引用问题,并明确表示开放应用程序需要 Latin1 字符集。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多