Estoy escribiendo un archivo CSV usando Perl. Los datos que entran en el archivo CSV contienen caracteres Unicode. Estoy usando el siguiente para escribir el CSV a cabo:Force UTF-8 Byte Order Mark en la salida del archivo Perl
#OPEN THE FILE FOR WRITE
open(my $fh, ">:utf8", "rpt-".$datestring.".csv")
or die "cannot open < rpt.csv: $!";
que está escribiendo correctamente los caracteres dentro del archivo, pero no parece ser el UTF8 incluyendo Byte marca de orden. Esto, a su vez, desaprovecha a mis usuarios que intentan abrir el archivo en Excel. ¿Hay alguna manera de forzar la escritura de la Marca de Orden de Byte?
lo intenté de la siguiente manera:
print $fh "\x{EFBBBF};
que terminó con un galimatías en la parte superior del archivo. Cualquier ayuda sería muy apreciada.
Una 'Marca de orden de byte' para UTF-8 no tiene sentido lógico: solo hay un posible orden de bytes para UTF8. Soy consciente de que varias aplicaciones de Windows dependen de la presencia del 'BOM' para desencadenar el uso de una codificación Unicode en lugar de una página de códigos de Microsoft, pero si no se trata de aplicaciones de MS rotas, no hay ningún valor al agregar una lista de materiales a un Documento UTF8. –
@Grant: O, para ser pedantes: Dado que UTF-8 codifica como una secuencia de bytes, hay * orden * de bytes. La orden de bytes (o Endianness) solo tiene sentido para números de múltiples bytes. – musiKk
@Grant Estoy de acuerdo con usted en principio. Sin embargo, mis usuarios están utilizando aplicaciones rotas de MS. De ahí la necesidad de forzar el BOM. –