Estaba tratando de solucionar algunos problemas extraños de reasignación de PDF Unicode cuando me quedé atascado con este problema en el que agregar un carácter ENQ Unicode a alguna parte del código le impide compilar el código e IDE le presentará lo que creo que es una falsa alarma ( error).
Considere este ejemplo de código Kotlin completamente válido y llamémoslo Programa A donde, lamentablemente, no puede ver los caracteres reales aquí entre apóstrofes, pero créame, hay un carácter allí (si copia este código en su IDE, puede ver esos caracteres) .
package yamin fun main() { val foo = mutableListOf('') //val bar = mutableListOf('') println(foo) }Sin embargo, puedes verlos en la imagen.
Pero si decide compilar este código de alguna manera, IDE falla al compilarlo y afirma que hay ' Demasiados caracteres en un carácter literal ' en la línea 4 .
Lo que es interesante es que la mera presencia del carácter ENQ incluso en una línea de comentario evita que el IDE compile este código y si elimina la línea 5 , por lo tanto, elimina la presencia del carácter ENQ, entonces puede compilar este código (llamémoslo Programa B ), observar:
De todos modos, si decide eliminar la línea 4 en el Programa A y descomentar la línea 5 , también puede compilar ese código (llamémoslo Programa C ).
Entonces, recapitulemos que el Programa A no es válido y la línea 4 es la culpable de la invalidez, pero eliminar la línea 5 en ese programa que nos deja con el Programa B podría compilarse con éxito y esta situación se repite para el Programa C.
¿Que me estoy perdiendo aqui?
Parece un error en el compilador de Kotlin, porque el error ocurre incluso si el código se compila con la línea de comandos: kotlinc enq.kt -include-runtime -d enq.jar
Además, este sencillo programa da diferentes resultados en el patio de recreo (correcto):
y localmente (incorrecto):
Como solución, puede usar la sintaxis de secuencia de escape Unicode (al menos para el símbolo ENQ):
Playground hace lo mismo cuando pasa este código al servidor, por lo que el compilador obtiene un código desinfectado: 