The fix is consistent across patches. The issue is that `replace` on a numpy chararray returns a copy and doesn't modify in-place, so the result needs to be assigned back to the array using slice assignment `output_field[:] = ...`.

--- a/astropy/io/fits/fitsrec.py
+++ b/astropy/io/fits/fitsrec.py
@@ -1262,7 +1262,7 @@ class FITS_rec(np.recarray):
 
         # Replace exponent separator in floating point numbers
         if 'D' in format:
-            output_field.replace(encode_ascii('E'), encode_ascii('D'))
+            output_field[:] = output_field.replace(encode_ascii('E'), encode_ascii('D'))
 
 
 def _get_recarray_field(array, key):