Skip to content

Commit 77659e4

Browse files
committed
lua 5.1+ compatible encoding of unicode characters as escaped decimal bytes
1 parent 74b4229 commit 77659e4

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

shared/src/main/scala/io/kaitai/struct/translators/LuaTranslator.scala

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.kaitai.struct.translators
22

3+
import java.nio.charset.StandardCharsets
4+
35
import io.kaitai.struct.ImportList
46
import io.kaitai.struct.datatype.DataType
57
import io.kaitai.struct.datatype.DataType._
@@ -22,8 +24,11 @@ class LuaTranslator(provider: TypeProvider, importList: ImportList) extends Base
2224
'\33' -> "\\027"
2325
)
2426

25-
override def strLiteralUnicode(code: Char): String =
26-
"\\u{%04x}".format(code.toInt)
27+
override def strLiteralUnicode(code: Char): String = {
28+
// compatible unicode encoding UTF8 bytes as \ddd where d = number 0-255
29+
// handles both 1 and 2 bytes Chars/codes
30+
String.valueOf(code).getBytes(StandardCharsets.UTF_8).map("\\%d" format _ & 0xff).mkString
31+
}
2732

2833
override def numericBinOp(left: Ast.expr, op: Ast.operator, right: Ast.expr) = {
2934
(detectType(left), detectType(right), op) match {

0 commit comments

Comments
 (0)