fsk33 2023-03-08 16:15 采纳率: 73.9%
浏览 98
已结题

C#中文字符显示为乱码

用C#编写了一个DICOM医学图像接收程序,当发送患者列表中登记的姓名是拼音时,接收到的姓名正常显示(也是拼音),但如果发送患者列表中登记的是中文名时,显示为乱码。如姓名:伍海文,显示为:浼嶆捣鏂?(这个乱码是我从数据库中复制出来的)。在网上搜了许多编码格式转换的代码,均没有用。
另外,从发送端设置里查到,那边DICOM图像编码格式是ISO_IR 192,(网上搜了一下,DICOM默认编码格式是ISO_IR 100)但我无论怎么转换都没效果,可能操作不对吧。
我的代码如下(只列出了姓名获取的代码):

 class PatientInfo
 //患者姓名
        public string patName
        {
            get;
            set;
        }
 PatientInfo.patName = Ddataset.Get<string>(DicomTag.PatientName, "NONAME").Replace("\0", "");

运行下来,这个PatientInfo.patName始终是乱码。
请问,如何对PatientInfo.patName进行转换而正常显示中文名,需要代码。

  • 写回答

9条回答 默认 最新

  • 「已注销」 2023-03-08 17:41
    关注

    “Devil组”引证GPT后的撰写:

    • 问题就是涉及到字符编码的转换问题,因为中文字符在不同的编码格式下,对应的二进制数值是不同的,如果在接收端和发送端的编码格式不一致,就有可能导致中文字符乱码的情况。
    • 从DICOM协议的规范上看,DICOM中使用的字符编码格式是多种多样的,包括ISO_IR 100、ISO_IR 192等等,这些编码格式都是通过DICOM标签来指定的。
    • 在C#中,可以使用System.Text.Encoding类来进行字符编码的转换。

    根据你提供的信息,试以下的代码:

    //获取DICOM标签中的患者姓名
    string nameInDicom = Ddataset.Get<string>(DicomTag.PatientName, "NONAME").Replace("\0", "");
    
    //将DICOM中的姓名字符串按照指定的编码格式解码为字节数组
    byte[] nameBytes = System.Text.Encoding.GetEncoding("ISO_IR 192").GetBytes(nameInDicom);
    
    //将字节数组按照指定的编码格式转换为字符串
    string nameInChinese = System.Text.Encoding.UTF8.GetString(nameBytes);
    
    //将最终的中文姓名赋值给PatientInfo对象
    PatientInfo.patName = nameInChinese;
    
    

    先将DICOM标签中获取的患者姓名字符串nameInDicom按照ISO_IR 192编码格式转换为字节数组nameBytes,然后再将nameBytes按照UTF-8编码格式转换为中文字符串nameInChinese。最后将nameInChinese赋值给PatientInfo对象的patName属性即可。

    • 需要注意的是,如果发送端和接收端的字符编码格式不一致,那么在将DICOM中的字符串解码为字节数组时,需要使用发送端指定的编码格式。如果发送端指定的编码格式是ISO_IR 192,那么在接收端解码时也应该使用相同的编码格式。如果不确定发送端使用的编码格式,可以先尝试使用不同的编码格式进行解码,并观察结果是否正确。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 3月8日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效