如何将在字符集UTF8中创建的数据作为字符集Shift-JIS写到文件中而不会丢失字符

时间:2020-07-04 01:16:14

标签: encoding utf-8 shift-jis

我正在通过查询数据表单DB并使用它来创建文件来创建文件,情况如下: 数据库:具有字符集UTF8的Oracle 应用服务器:带有字符集UTF8的树脂 应用程序框架:NTT Intra-Mart(基于Rihno并使用javascript作为服务器程序语言的日语框架) 需要:从Oracle查询数据并通过字符集[Shift-JIS]创建文件,该文件用作中间文件,该文件由一个系统导出,并通过FTP传输到另一个系统上进行导入。 该文件要求目标服务器具有固定的字节范围,以定位要导入的指定数据: 例如 字节1-10:[用户地址] 字节11-20:[用户名] 但是,首先我使用UTF8创建文件,似乎所有字符均正确显示,但是当我尝试使用字符集[SJIS]写入数据时,有一些全角字符变成半角问号[?],可能导致字节宽度缩短并且无法正确获取数据: 例如 当[用户地址]的数据为:1-10-1时,文件中的数据将变为1×10×1 字节1-10:[用户地址],但在当前文件中,用户地址为字节1-8 字节11-20:[用户名] 你能给我一些建议吗?

1 个答案:

答案 0 :(得分:0)

您将不得不使用字符集名称Windows-31J而不是Shift-JIS

将从Microsoft IME中键入数据1-10-1。 Microsoft IME使用U+FF0D(全副字符减号)来表示字符

  • U+FF0D在JavaVM的Shift-JIS-Unicode映射中未映射到任何字符。因此,当将?从JVM内部表示(UTF-16)转换为具有字符集的Shift-JIS时,您将得到Shift-JIS
  • U+FF0D在Windows-31J中映射为0x817C-JavaVM中的Unicode映射。因此,当将从JVM内部表示(UTF-16)转换为具有字符集的Shift-JIS时,您将得到Windows-31J
相关问题