首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有unicode字符的ISO8583字段长度

具有unicode字符的ISO8583字段长度
EN

Stack Overflow用户
提问于 2019-07-03 10:05:16
回答 1查看 496关注 0票数 4

field 44/an ..25/Additional response data.消息可以包含可变长度字段,例如Iso8583目前,我们正在根据字符长度计算这些字段,但是我们增加了对右双引号()和右单引号()的支持,这需要UTF-8。这些字符被编码为三个字节,这意味着字节长度和字符/字符串长度不再相等,这破坏了我们的一些进程。

我的问题是- Iso8583标准是否要求字段长度为字节或字符?

维基百科是不一致的,而且我发现的大多数其他来源并不是非常明确的。

EN

回答 1

Stack Overflow用户

发布于 2022-06-27 11:34:08

如果希望在特定字段中使用Unicode字符,则ISO8583标准不会为此限制您。

您可以开发一个新的字段解析器,它获取字节流/数组并将其转换为字符串,然后将该字符串设置为字段数据,在C#转换为string中就足够了(因为.net引擎使用Unicode作为存储字符串的主要编码)

下面是一个使用OpenIso8583Net库的示例:

代码语言:javascript
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56867637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档