Я полагаю, что причина проблемы в том, что Python (для меня это происходило только в Python 3, работающем на Centos 7.6 Linux, печатающем в окно терминала в MacOS), не может понять, как напечатать строку, содержащую не-ascii символ из-за настройки локали.Вы можете использовать команду locale, чтобы увидеть результаты.Мой начался со всего, установленного на "C".Я установил переменную среды LANG в en_US.UTF-8.С этой настройкой это сработало для меня.В csh это делается с помощью
setenv LANG en_US.UTF-8
При использовании bash:
export LANG=en_US.UTF-8
Моя проблема возникла из-за наличия 'µ' в элементе описания серии.Файл представлял собой карту затухания, полученную при реконструкции SPECT на сканере Siemens.Я использовал следующий код Python, чтобы помочь выяснить проблему.
#! /usr/bin/env python3
import pydicom as dicom
from sys import exit, argv
def myprint(ds, indent=0):
"""Go through all items in the dataset and print them with custom format
Modelled after Dataset._pretty_str()
"""
dont_print = ['Pixel Data', 'File Meta Information Version']
indent_string = " " * indent
next_indent_string = " " * (indent + 1)
for data_element in ds:
if data_element.VR == "SQ": # a sequence
print(indent_string, data_element.name)
for sequence_item in data_element.value:
myprint(sequence_item, indent + 1)
print(next_indent_string + "---------")
else:
if data_element.name in dont_print:
print("""<item not printed -- in the "don't print" list>""")
else:
repr_value = repr(data_element.value)
if len(repr_value) > 50:
repr_value = repr_value[:50] + "..."
try:
print("{0:s} {1:s} = {2:s}".format(indent_string,
data_element.name,
repr_value))
except:
print(data_element.name,'****Error printing value')
for f in argv[1:]:
ds = dicom.dcmread(f)
myprint(ds, indent=1)
Это основано на функции myprint из] 1
Код пытается распечататьвсе элементы данных.Он перехватывает исключения и печатает «**** Ошибка печати значения» при возникновении ошибки.