Dada una cadena, una lista de caracteres, una secuencia de bytes, una secuencia ... que es a la vez UTF-8 válido y Windows-1252 válido (la mayoría de los idiomas probablemente querrán tomar una cadena UTF-8 normal), conviértalo (es decir, suponga que es ) Windows-1252 a UTF-8 .
Ejemplo de recorrido
La cadena UTF-8
I ♥ U T F - 8
se representa como los bytes que
49 20 E2 99 A5 20 55 54 46 2D 38
estos valores de bytes en la tabla Windows-1252 nos dan los equivalentes Unicode
49 20 E2 2122 A5 20 55 54 46 2D 38
que se representan como
I â ™ ¥ U T F - 8
Ejemplos
£ → £
£ → £
£ → £
I ♥ UTF-8 → I ♥ UTF-8
árvíztűrő tükörfúrógép → árvÃztűrÅ‘ tükörfúrógép

€ ‚ƒ„…†‡ˆ‰Š‹Œ Ž ‘’“”•–—˜™š›œ žŸ. (espacio = sin usar)Respuestas:
bash, 14 bytes
Pruébalo en línea!
fuente
Java 8,
72663625 bytesPruébalo en línea.
cp1252es un alias paraWindows-1252. Este aliascp1252es el nombre canónico para las APIjava.ioyjava.lang, mientras que el nombre completoWindows-1252es el nombre canónico para lajava.nioAPI. Consulte aquí para obtener una lista completa de codificaciones Java compatibles , donde siempre nos gustaría utilizar la más corta de las dos para codegolfing.fuente
java.nioAPI": PR 3.5.0 o superior,
3220 bytesPruébalo en línea!
Curiosamente corto para un desafío de cuerdas en R ... ¡ gracias a JayCe por jugar 12 bytes más!
scanopcionalmente toma unencodingargumento para establecer la codificación de la cadena de entrada.latin1corresponde a, de acuerdo con la documentación deEncodingfuente
Encoding... y aprendí quescantambién tiene unencodingargumento O_O ... 20 bytesPython 2 ,
4038 bytes-2 bytes gracias a Erik the Outgolfer .
Pruébalo en línea!
u8 es un alias para
utf-8.fuente
input().decode(...).encode(...):) también creo que podría usar alguna codificación de consola de Windows si está en powershell (pero no estoy seguro de esto).Python 3 ,
38 3634 bytesPruébalo en línea!
nota: Después de tener una función de trabajo, utilicé la respuesta de respuesta python2 de ovs para conocer los campos de encabezado y pie de página para tio, por lo que el encabezado y el pie de página son los mismos
editar: Lo recorté un poco gracias a que python3 está predeterminado en utf8 y un consejo de la presentación de ovs :)
fuente
JavaScript, 64 bytes
Mostrar fragmento de código
Incluso más tiempo que la respuesta de Java. Muy triste. :(
fuente
Ruby , 31 bytes
Pruébalo en línea!
Los casos de prueba están incluidos en el TIO
fuente
C #, 81 bytes
Pruébalo en línea!
Gracias a Schmalls por 3 bytes.
fuente
using e=System.Text.Encoding;s=>e.GetEncoding(1252).GetString(e.UTF8.GetBytes(s))bajarlo a 81?180 bytes, código de máquina (16 bits x86)
Noté que la mayoría de las respuestas usan codificación / decodificación integrada (que creo que está perfectamente bien), pero pensé que continuaría mi búsqueda de 16 bits .
Al igual que con los anteriores, esto se hizo sin compilador utilizando principalmente HT hexeditor y ICY's hexplorer .
Disección
La implementación es bastante sencilla, aunque no he pensado demasiado en fluir por adelantado, por lo que hay ALGUNOS espaguetis allí.
Mezclaré un poco el orden, para que sea más fácil de seguir ...
Omita la tabla que asigna caracteres> = 0x80 <0xa0 a códigos unicode.
Los inválidos están codificados como 0, no están asignados a nada
La función auxiliar utilizada para imprimir caracteres
alse llamará pocas veces.Preparar registros. Los datos se leerán en 0x100, señalemos
sien la tabla de traducción anterior.Lea char de stdin, salte a 0x7d si EOF.
Nota al margen: en realidad es un truco pequeño (pero bastante conocido), contiene 0x7d
ret, esto hará quepop sp,spen los puntos de inicio al final de un segmento, esté00 00allí, ycs:0en DOS contieneCD 20, lo que hace que la aplicación salga.Si char es <0x80, simplemente imprímalo y vaya al comienzo del bucle (porque la función auxiliar está configurando BX en 1 - stdout, los saltos irán a
dec bx)Esta parte se ocupa de los caracteres> = 0xa0, divide el código ASCII en dos bits "altos" y 6 bits "bajos" y aplica la máscara utf-8 c080 para dos bytes, luego imprime ambos
Esta parte trata de caracteres> = 0x80 <0xa0, encuentra el código utf-8 adecuado en la tabla en la parte superior, si el código es igual a 0, salte al principio, si está por debajo de 0x7ff (ergo: cabe en dos bytes UTF-8) , solo ajuste el valor y reutilice el código anterior en 0x166.
Parte final, se ocupa de los códigos que están por encima de 0x7FF, baja 12 bits, aplica 0xE0 (consulte la descripción de codificación UTF-8 para referencia) e imprímalo, ajuste los 12 bits inferiores y aplique la máscara 8080 y vuelva a usar la parte que escupe dos caracteres .
fuente
PHP + mbstring ,
6349 bytes<?=mb_convert_encoding($argv[1],'UTF8','CP1252');No funciona en TIO debido a la falta de mbstring. El tercer parámetro fuerza a mbstring a interpretar la cadena como Windows-1252 codificada
-14 bytes gracias a Ismael Miguel
fuente
<?=mb_convert_encoding($argv[1],'UTF8','CP1252');<- incluso más corto!C (gcc) +
libiconv,119117bytesPruébalo en línea!
fuente