When there is a specified length with lengthUnits="characters", the SpecifiedLengthExplicitCharactersUnparserBase doesn't handling padding. This is because what happens the unparser that handles padding (StringOfSpecifiedLength) uses bitLimit to determine how much padding to add. But the SpecifiedLengthExplicitCharactersUnparserBase creates a CharBufferDataOutputStream to write that characters. However, this output stream does not have a bitLimit (since chars could be variable width), and so the StringOfSpecifiedLengthUnparser does not know how much padding to add.
Perhaps the padding logic needs to be done in the SpecifiedLengthExplicitCharactersUnparserBase class? So StringOfSpecifiedLength writes to a temporary char buffer and does not add padding because there is no bitLimit. Then the SpecifiedLength unparser can figure out how many characters to add based on that how many characters we're left unfilled?
Note that this prevents test_simple_type_properties_pad_trim_13_04 in edu.illinois.ncsa.daffodil.IBMTestsThatPass from round tripping.