数据编码

JVM 可以使用与 CICS® 不同的代码页进行字符编码; CICS 必须始终使用 EBCDIC 代码页,但 JVM 可以使用其他编码,例如 ASCII。 在开发使用 JCICS API 的应用程序时,必须确保使用正确的编码。

JCICS API 使用 CICS 区域中指定的代码页,而不是底层 JVM。 因此,如果 JVM 使用不同的文件编码,那么应用程序必须处理不同的代码页。 为了帮助您确定 CICS 正在使用的代码页, CICS 提供了若干 Java™ 属性:

  • com.ibm.cics.jvmserver.supplied.ccsid 属性返回为 CICS 区域指定的代码页。 缺省情况下, JCICS API 将此代码页用于其字符编码。 但是,可以在 JVM 服务器配置中覆盖此值。
  • com.ibm.cics.jvmserver.override.ccsid 属性返回 JVM 概要文件中覆盖的值。 该值是 JCICS API 用于其字符编码的代码页,而不是 CICS 区域使用的代码页。
  • com.ibm.cics.jvmserver.local.ccsid 属性返回 JCICS API 用于 JVM 服务器中字符编码的代码页。

无法在 Java 应用程序中设置任何这些属性以更改 JCICS 的编码。 要更改代码页,必须要求系统管理员更新 JVM 概要文件以添加 JVM 系统属性 -Dcom.ibm.cics.jvmserver.override.ccsid

编码示例

在数据传递到 CICS 之前,接受 java.lang.String 参数作为输入的任何 JCICS 方法都会自动使用正确的代码页进行编码。 同样,从 JCICS API 返回的任何 java.lang.String 值都将以正确的代码页进行编码。 JCICS API 在大多数类中提供帮助程序方法; 这些帮助程序方法使用字符串和数据来确定和设置代表应用程序的代码页。

如果应用程序使用 String.getBytes()new String(byte[] bytes) 方法,那么应用程序必须确保它使用正确的编码。 如果要在应用程序中使用这些方法,那么可以使用 Java 属性对数据进行正确编码:

String.getBytes(System.getProperty("com.ibm.cics.jvmserver.local.ccsid"))
String(bytes, System.getProperty("com.ibm.cics.jvmserver.local.ccsid"))

以下示例显示了当应用程序从 COMMAREA 读取字段时如何使用 JCICS 编码:

public static void main(CommAreaHolder ca)
{
    //Convert first 8 bytes of ca into a String using JCICS encoding
    String str=new String(ca.getValue(), 0, 8, System.getProperty("com.ibm.cics.jvmserver.local.ccsid"));
}