Следующий фрагмент кода (в классе, производном от quickfix.Application) coredumps / SIGSEGV при получении QuoteReqID в виде строки. Я поиграл с размером QuoteReqID и заметил, что строковые поля со значениями <16 символов обрабатываются очень хорошо, а строковые поля со значениями выше этого предела - нет, что приводит к возможному SIGSEGV или UnicodeEncodeError. Похоже, что это проблема со слоем SWIG, который использует Quickfix, особенно с python3. Я просто хотел посмотреть, делаю ли я что-то не так или уже есть обходной путь. </p>
import quickfix as fix
...
def fromApp(self, message, session_id):
msg_type = fix.MsgType()
message.getHeader().getField(msg_type)
if msg_type.getString() is fix.MsgType_QuoteRequest:
quote_req_id_field = message.getField(fix.QuoteReqID())
quote_req_id = quote_req_id_field.getString()
print(quote_req_id)
Кажется, я не могу продублировать условия, необходимые для coredump против UnicodeEncodeError. Когда происходит UnicodeEncodeError, вот как это выглядит в журналах FIX:
15 Characters
Original String=samplequotereqs
131=samplequotereqs
16 Characters
Original String=samplequotereqs
131= otereqs1
Во втором примере это не пробелы, предшествующие 'otereqs1', а скорее белый прозрачный вертикальный символ Юникода, который, я думаю, U + 25AF.