在处理EDI 210 X12入站文件时,由于EdiInvoice服务进程失败,接收到以下异常:十六进制值0x15的"是无效字符。第2行,位置37.’。因为X12输入文件具有ISA 16元素的垂直于106的位置。
你能提供一个处理这个符号的解决方案吗
像"|"这样定义segment separator
是X12 ISA段(ISA16,ISA段的字符106)并不罕见。看看相关的教程。据我所知,允许128
(十六进制0x80)以下带有ASCII代码的字符。
如果您的EdiInvoice
服务无法处理特定于合作伙伴的分段分隔符,您很可能必须首先联系工具的开发人员或服务提供商。
正如eppye所建议的:如果发送合作伙伴可以切换到"更容易"的分段分离器,这也是一种选择,但合作伙伴必须有充分的理由投入时间和精力。
如果EDI 210 X12消息的语法符合规范,则发送伙伴没有义务更改任何内容。
否,CR和CR+LF都不允许作为段终止符。
X12基于";图形字符";,独立于字符编码。CR是不可打印的字符,而不是图形字符。
基本字符列表中允许的字符有"abcdefghijklmnopqrstuvxyz0123456789"amp;'()*+,-./:=">
扩展字符列表为"abcdefghijklmnopqrstuvxyz%@[]_{}\|<gt~^`#$">
支持扩展字符的是贸易伙伴协议项。
成为";X12合法";,必须使用基本集合中的字符。如果支持扩展集,则可以使用其中的字符。
"X12合法的";只有当你的贸易伙伴认为它(或他们的软件)是重要的。
使用CR或CR+LF并不罕见,即使纯粹主义者不赞成。
在每个分段终止符之后具有CR或CR+LF更为常见。
一些公司确实使用不可打印字符作为段终止符。AFAIK这在ANSI X12中是可以的。有点聪明,因为不允许在数据中使用段终止符,而且数据(几乎;-))永远不会包含十六进制15。我见过十六进制07、回车等。
.
可能的解决方案:
1。请与服务提供商联系,他们应该修复它。
2。询问edi合作伙伴是否可以使用其他分段终止符
3.预处理文件并替换该字符。也许不可能
不确定您使用的是哪种EDI工具,但另一种选择是在您的工具中的合作伙伴配置文件中定义元素和段终止符。我在Sterling Integrator中做过这件事,知道其他人也支持这一点。
在您的情况下,您需要确认以下规则的贸易伙伴,这样他们就不会将ISA16与分段终止符或后缀弄错
ISA16(子元素分隔符)
- Char
- 3a如果类型为Hex
仅限于ASCII字符集中的值。
段终止符
- ~如果类型为Char
- 7e,如果类型为Hex
- 空的
,但如果这样做,则需要指定一个后缀。此元素仅限于ASCII字符集中的值。
后缀
- 要么无
- CR(回车)
- LF(线路馈电)
- CRLF(回车/换行)
段终止符和后缀的各种组合
- 段终止符
- 段终止符+回车
- 段终止符+换行
- 段终止符+回车/换行
- 回车
- 换行
- 回车/换行