Historically, Unix has not treated the null character (zero) as a valid text character. The C programming language uses it to indicate the end of a string. Consequently, when a C program (such as sed or vi) loads text which contains embedded nulls from a file, nulls need to be stripped to prevent them from prematurely terminating the input string. Nulls are also sometimes used for padding. So, yes the null's tend to get stripped by the text processing commands.
The nulls in the files are maintained by programs which don't treat the contents of the file as text. For example, the command "od -c <file>" should print out the nulls in a file as "\0" which will allow you to determine if they are still there. If this were my problem, I'd probably whip up a little program to read the file (as a binary file) and substitute another character (which won't get stripped) for the nulls. I'm afraid I can't think of an existing program which would do this offhand. Perhaps a binary editor could be used? I found:
I bump into that often enough that years ago (decades ago?) I slapped together the following C program. Put it into a file such as null2spc.c with your favorite text editor then run the command "make" to compile it. Redirect in and out, e.g.