我有一个 C# 应用程序,在其中接收 HL7 消息并使用 NHAPI 库来解析它。 但我无法提取 Base 64 编码消息。
有什么方法可以提取 Base 64 位图消息吗? 我可以解码该字符串,但我需要正确格式的编码字符串。 我如何实现这一目标?
我尝试过以下方法
HL7 消息示例:
MSH|^~\&|xyz|abcd|||20240408201653||ORU^R01|10|P|2.3.1||||||UNICODE
PID|1||^^^^MR
PV1|1
OBR|1||129|00001^Automated Count^99MRC|||20240408150949|||||||||||||||||HM|NotValidated|||||||Service
OBX|1|IS|08001^Take Mode^99MRC||O||||||F
OBX|2|IS|08002^Blood Mode^99MRC||W||||||F
OBX|3|IS|08003^Test Mode^99MRC||CBC+DIFF+ESR||||||F
OBX|4|NM|751-8^NEU#^LN||5.32|10*9/L|2.00-7.00|N|||F
OBX|5|NM|731-0^LYM#^LN||3.92|10*9/L|0.80-4.00|N|||F
OBX|6|ED|15008^Bitmap One BMP^99MRC||^Image^BMP^Base64^Qk0OQgAAAAAAALYDAAAoAAAAlgAAAGkAAAABAAgAAAAAAAAAAADEDgAAxA4AAOAAAADgA=|||F
OBX|7|ED|15056^Bitmap two BMP^99MRC||^Image^BMP^Base64^Qk0OQgAAAAAAALYDAAAoAAAAlgAAAGkAAAABAAgAAAAAAAAAAADE=|||F
我的代码方法:
string hl7Message = File.ReadAllText(filePath);
PipeParser parser = new PipeParser();
IMessage message = parser.Parse(hl7Message.Trim());
ORU_R01 oRU_R01 = message as ORU_R01;
foreach (var observation in oRU_R01.PATIENT_RESULTs.FirstOrDefault()?.ORDER_OBSERVATIONs)
{
foreach (var obx in observation?.OBSERVATIONs)
{
string description = "";
string result = "";
string abnormalFlag = " ";
if (obx.OBX.ValueType.Value == "NM")
{
description = obx.OBX.ObservationIdentifier.Text.Value;
result= obx.OBX.GetObservationValue(0).Data.ToString();
abnormalFlag = obx.OBX.GetAbnormalFlags(0).Value;
Updatetxtbx($" Parameter: {description}, Result: {result}, Flag: {abnormalFlag}");
}
else if(obx.OBX.ValueType.Value == "ED")
{
string observationIdentifier = obx.OBX.ObservationIdentifier.Text.Value;
string enData = obx.OBX.GetObservationValue(0).Data.ToString();
SaveBitmapFromBase64(enData, "C:\\" + DateTime.Now.ToString("yyyy-mm-ss") + ".bmp");
Updatetxtbx($"Base64 Encoded Data: {enData}");
}
}
}
public void SaveBitmapFromBase64(string base64, string filePath)
{
try
{
byte[] imageBytes = Convert.FromBase64String(base64);
using (MemoryStream ms = new MemoryStream(imageBytes))
{
Bitmap bitmap = new Bitmap(ms);
bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Bmp);
log("Bitmap saved successfully.");
}
}
catch (Exception ex)
{
log("Error saving bitmap: " + ex.Message);
}
}
我的方法 Savebitmapfrombase64 抛出错误:
The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
对此有什么想法
该行从 OBX-5 获取观测值:
string enData = obx.OBX.GetObservationValue(0).Data.ToString();
。例如,对于第七个 OBX 段,这将使 enData
等于“^Image^BMP^Base64^Qk0OQgAAAAAAALYDAAAoAAAAlgAAAGkAAAABAAgAAAAAAAAAAADE=”。这不是有效的 Base64 编码字符串。
您应该抓住该克拉分隔字符串的第五段并将该部分(在本例中为“Qk0OQgAAAAAAALYDAAAoAAAAlgAAAGkAAAABAAgAAAAAAAAAAADE=”)传递给
SaveBitmapFromBase64
。