找回密码
 立即注册

QQ登录

只需一步,快速开始

sesan

高级会员

25

主题

103

帖子

1061

积分

高级会员

积分
1061

微信认证勋章

sesan
高级会员   /  发表于:2019-7-31 10:55  /   查看:5631  /  回复:7
1金币
这个问题用DEMO里面的CSDicomEditorDemo.exe就可以重现,用CSDicomEditorDemo.exe打开附件中的dcm文件,只要是编码使用GB18030,将Patient Name设置成中文,保存文件,重新打开以后会发现Patient Name为空,即保存失败。用程序设置Patient Name的值也会设置失败。

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

7 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-7-31 12:17:34
沙发
你现在是要自己创建dcm文件吗? ,测试了确实存在问题。

之前客户那边出现过机器生成的dcm文件中文乱码的问题,加入了这个设置后可以解决。

你这个问题需要点时间研究一下,看看是否是其他的字段也有控制
回复 使用道具 举报
sesan
高级会员   /  发表于:2019-7-31 12:25:28
板凳
我试过用其他的第三方工具来修改就没问题,所以应该跟其他字段没有关系。
回复 使用道具 举报
sesan
高级会员   /  发表于:2019-7-31 12:27:10
地板
我现在是WorkList要往设备发中文,那个设备只支持GB18030编码,因为设置病人姓名不成功,所以那边WorkList显示不出病人姓名。
回复 使用道具 举报
sesan
高级会员   /  发表于:2019-7-31 12:55:18
5#
      下面这段是我的测试代码,我试了好久都无法把中文用GB18030的编码设置进去。麻烦帮我找个能把GB18030的字符串值设置进去的方法
               DicomDataSet ds = new DicomDataSet();
                ds.Initialize(DicomClassType.Undefined, DicomDataSetInitializeFlags.None);
                ds.InsertElementAndSetValue(DicomTag.SpecificCharacterSet, "GB18030");
                DicomElement element = ds.InsertElement(null, false, DicomTag.PatientName, DicomVRType.PN, false, 0);
                Encoding utf8 = Encoding.GetEncoding("UTF-8");
                Encoding gb18030 = Encoding.GetEncoding("GB18030");
                byte[] gb = utf8.GetBytes("测试");
                gb = Encoding.Convert(utf8, gb18030, gb);
                if (!ds.SetStringValue(element, gb18030.GetString(gb), DicomCharacterSetType.Gb18030))
                {
                    System.Console.WriteLine("Set Value Failed");
                }
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-7-31 14:53:02
6#
我先帮你研究一下,明天给你答复
回复 使用道具 举报
sesan
高级会员   /  发表于:2019-7-31 15:06:04
7#
好的,谢谢!
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-7-31 17:10:08
8#
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部