HSM KitHSM Kit
中文

字符编码详解:ASCII、EBCDIC、十六进制与二进制

General# ASCII# EBCDIC# 十六进制# 二进制
Last Updated: 2026年5月21日7 min readBy HSM Kit Team
Need to calculate this now?
Use our free online 字符编码转换器 tool.

字符编码是计算机表示文本的基础。ASCII 和 EBCDIC 是两种最古老的编码系统,理解它们——特别是它们之间的差异——在处理遗留支付系统、大型机和 HSM 时至关重要。本文介绍这两种编码以及如何在它们之间转换。

什么是字符编码?

字符编码将字符(字母、数字、符号)映射为计算机可以存储和处理的数值。字母 A 在内存中并不存在——它是以数字形式存储的:在 ASCII 中是 65,在 EBCDIC 中是 193

您遇到的每段文本都使用某种编码。如果用错误的编码解释字节,会得到乱码——这就是经典的"乱码"问题。

ASCII

ASCII(美国信息交换标准代码)于 1963 年发布,成为英文文本的主导编码。

ASCII 表结构

  • 128 个字符(0-127),使用 7 位
  • 控制字符:0-31 和 127(不可打印)
  • 可打印字符:32-126

关键范围:

十进制十六进制字符描述
48-5730-390-9数字
65-9041-5AA-Z大写字母
97-12261-7Aa-z小写字母
3220空格空白字符
33-4721-2F! " # $ %...常用标点符号

常见控制字符

十进制十六进制名称描述
000NUL空字符
100ALF换行
130DCR回车
271BESC转义
909HT水平制表符

ASCII 在现代系统中的应用

ASCII 是几乎所有现代编码的基础。UTF-8 与 ASCII 向后兼容——任何有效的 ASCII 文本也是有效的 UTF-8。这就是为什么 ASCII 知识仍然至关重要。

EBCDIC

EBCDIC(扩展二进制编码十进制交换码)由 IBM 于 1963-1964 年为其 System/360 大型机开发。它仍在 IBM 大型机(z/OS)和 AS/400(IBM i)系统中使用。

EBCDIC 表结构

  • 256 个字符(0-255),使用 8 位
  • 布局与 ASCII 不同——这是混淆的根源
  • 字母范围中有间隙(不连续)

关键范围:

十进制十六进制字符描述
240-249F0-F90-9数字
193-202C1-CAA-J字母 A-J
209-217D1-D9J-R字母 J-R
226-233E2-E9S-Z字母 S-Z
129-13781-89a-i小写 a-i

注意间隙——EBCDIC 字母不像 ASCII 那样连续。这使得基于范围的字符检查更加复杂。

EBCDIC 在支付系统中的应用

EBCDIC 仍广泛用于:

  • IBM 大型机(z/ISO-TP、z/VSE)处理金融交易
  • 支付交换器运行在大型机平台上
  • ATM 网络使用 EBCDIC 编码的 ISO 8583 消息
  • 卡片处理系统需要与遗留大型机集成

许多 HSM 支持 EBCDIC,因为它们直接与大型机支付系统交互。

ASCII vs EBCDIC 对比

方面ASCIIEBCDIC
位宽7 位(存储在 8 位中)8 位
总字符数128256
数字48-57(连续)240-249(连续)
大写字母65-90(连续)193-202、209-217、226-233(有间隙)
小写字母97-122(连续)129-137、145-153、162-169(有间隙)
来源行业标准IBM
现代使用通用仅限大型机

数字偏移量

一个有用的事实:在 ASCII 中,数字从 48(十六进制 30)开始。在 EBCDIC 中,数字从 240(十六进制 F0)开始。将数字字符转换为其数值:

  • ASCII:char - 0x30(例如,'5' = 0x35,所以 0x35 - 0x30 = 5
  • EBCDIC:char - 0xF0(例如,'5' = 0xF5,所以 0xF5 - 0xF0 = 5

十六进制和二进制表示

每种编码映射到特定的十六进制值。理解十六进制表示对于 HSM 和支付工作至关重要:

示例:"HELLO" 在不同编码中的表示

字符ASCII 十六进制EBCDIC 十六进制
H48C8
E45C5
L4CD3
L4CD3
O4FD6

相同的单词根据编码不同产生完全不同的字节序列。

编码间转换

要在 ASCII 和 EBCDIC 之间转换文本,需要一个转换表,将每个字符从一种编码映射到另一种编码。这不是简单的算术运算——需要查找。

常见转换方法:

  1. 在源编码表中查找源字节 → 得到字符
  2. 在目标编码表中查找字符 → 得到目标字节

编码兼容性问题

数据损坏

当 EBCDIC 编码的数据被解释为 ASCII(反之亦然)时,结果是乱码:

EBCDIC 字节: C8 C5 D3 D3 D6  (表示 "HELLO")
作为 ASCII 解释: ÈÅÓÓÖ  (无意义的字符)

这是在大型机和现代系统之间传输数据时的常见问题。

ISO 8583 消息

ISO 8583 支付消息根据系统可以使用 ASCII 或 EBCDIC 编码。当 HSM 处理这些消息时,必须知道使用哪种编码。编码不匹配会导致:

  • PAN 提取错误
  • MAC 计算错误
  • PIN 块处理失败

HSM 通信

许多 HSM(特别是 Thales/PayShield)使用 ASCII 进行命令通信,但某些 IBM 兼容的 HSM 使用 EBCDIC。始终检查您的 HSM 文档。

实际应用场景

大型机集成

将现代应用程序与 IBM 大型机集成时:

  • 发送前将请求从 ASCII 转换为 EBCDIC
  • 接收后将响应从 EBCDIC 转换为 ASCII
  • 仔细处理数值字段(压缩十进制、BCD)

调试支付消息

调试 ISO 8583 或 APDU 命令时:

  • 检查预期的编码
  • 使用正确的表将十六进制值转换为字符
  • 寻找常见模式:数字(ASCII 30-39,EBCDIC F0-F9)

日志分析

大型机日志通常是 EBCDIC 编码的。在现代系统上分析这些日志时,需要转换文本才能阅读。

扩展 ASCII 和代码页

除了基本 ASCII(0-127),扩展 ASCII(128-255)因代码页而异:

  • CP437:原始 IBM PC 字符集
  • CP850:多语言拉丁 I
  • ISO 8859-1(Latin-1):西欧
  • Windows-1252:Latin-1 的超集

类似地,EBCDIC 有多个代码页(CP037 用于美国英语,CP500 用于国际)。

在线工具

使用 字符编码转换器

  • 在 ASCII、EBCDIC、十六进制、二进制和 Base64 之间转换文本
  • 并排查看完整的 ASCII 和 EBCDIC 表
  • 通过查看字节级表示调试编码问题
  • 转换大型机数据以进行现代系统分析

所有处理都在浏览器中进行——您的数据永远不会离开您的设备。

Related Tool
字符编码转换器