field 44/an ..25/Additional response data.消息可以包含可变长度字段,例如Iso8583目前,我们正在根据字符长度计算这些字段,但是我们增加了对右双引号(”)和右单引号(’)的支持,这需要UTF-8。这些字符被编码为三个字节,这意味着字节长度和字符/字符串长度不再相等,这破坏了我们的一些进程。
我的问题是- Iso8583标准是否要求字段长度为字节或字符?
维基百科是不一致的,而且我发现的大多数其他来源并不是非常明确的。
发布于 2022-06-27 11:34:08
如果希望在特定字段中使用Unicode字符,则ISO8583标准不会为此限制您。
您可以开发一个新的字段解析器,它获取字节流/数组并将其转换为字符串,然后将该字符串设置为字段数据,在C#转换为string中就足够了(因为.net引擎使用Unicode作为存储字符串的主要编码)
下面是一个使用OpenIso8583Net库的示例:
using System.Text;
namespace OpenIso8583Net.Formatter
{
/// <summary>
/// UTF8 Field Formatter
/// </summary>
public class UTF8Formatter : IFormatter
{
#region IFormatter Members
/// <summary>
/// Format the string and return as an encoded byte array
/// </summary>
/// <param name = "value">value to format</param>
/// <returns>Encoded byte array</returns>
public byte[] GetBytes(string value)
{
return Encoding.UTF8.GetBytes(value);
}
/// <summary>
/// Format the string and return as an encoded byte array
/// </summary>
/// <param name = "value">value to format</param>
/// <param name="length"> </param>
/// <returns>Encoded byte array</returns>
public byte[] Pack(string value, int length)
{
return Encoding.UTF8.GetBytes(value.PadLeft(length, '0'));
}
/// <summary>
/// Length for UTF8 is not Implemented Completely!
/// Format the string and return as an encoded byte array
/// </summary>
/// <param name = "value">value to format</param>
/// <param name="length"> </param>
/// <returns>Encoded byte array</returns>
public byte[] GetBytes(string value, int length)
{
return Encoding.UTF8.GetBytes(value);
}
/// <summary>
/// Takes the byte array and converts it to a string for use
/// </summary>
/// <param name = "data">Data to convert</param>
/// <returns>Converted data</returns>
public string GetString(byte[] data)
{
return Encoding.UTF8.GetString(data);
}
/// <summary>
/// Gets the packed length of the data given the unpacked length
/// </summary>
/// <param name = "unpackedLength">Unpacked length</param>
/// <returns>Packed length of the data</returns>
public int GetPackedLength(int unpackedLength)
{
return unpackedLength;
}
#endregion
}
}https://stackoverflow.com/questions/56867637
复制相似问题