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

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日

悬赏问题

  • ¥15 为什么apriori的运行时间会比fp growth的运行时间短呢
  • ¥15 帮我解决一下膳食平衡的线性规划模型的数据实例
  • ¥40 万年历缺少农历,需要和阳历同时显示
  • ¥250 雷电模拟器内存穿透、寻基址和特征码的教学
  • ¥200 比特币ord程序wallet_constructor.rs文件支持一次性铸造1000个代币,并将它们分配到40个UTXO上(每个UTXO上分配25个代币),并设置找零地址
  • ¥15 关于Java的学习问题
  • ¥15 如何使用chatgpt完成文本分类任务?
  • ¥15 已知速度v关于位置s的等式,怎么转化为已知位置求速度v的等式
  • ¥15 我有个餐饮系统,用wampserver把环境配置好了,但是后端的网页却进去,是为什么,能不能帮远程一下?
  • ¥15 R运行没有名称为"species"的插槽对于此对象类"SDMmodelCV"