fix: decode bonjour escaped utf8
parent
bc2a66da32
commit
0ac7a93c28
|
|
@ -4,7 +4,7 @@ object BonjourEscapes {
|
||||||
fun decode(input: String): String {
|
fun decode(input: String): String {
|
||||||
if (input.isEmpty()) return input
|
if (input.isEmpty()) return input
|
||||||
|
|
||||||
val out = StringBuilder(input.length)
|
val bytes = mutableListOf<Byte>()
|
||||||
var i = 0
|
var i = 0
|
||||||
while (i < input.length) {
|
while (i < input.length) {
|
||||||
if (input[i] == '\\' && i + 3 < input.length) {
|
if (input[i] == '\\' && i + 3 < input.length) {
|
||||||
|
|
@ -14,17 +14,22 @@ object BonjourEscapes {
|
||||||
if (d0.isDigit() && d1.isDigit() && d2.isDigit()) {
|
if (d0.isDigit() && d1.isDigit() && d2.isDigit()) {
|
||||||
val value =
|
val value =
|
||||||
((d0.code - '0'.code) * 100) + ((d1.code - '0'.code) * 10) + (d2.code - '0'.code)
|
((d0.code - '0'.code) * 100) + ((d1.code - '0'.code) * 10) + (d2.code - '0'.code)
|
||||||
if (value in 0..0x10FFFF) {
|
if (value in 0..255) {
|
||||||
out.appendCodePoint(value)
|
bytes.add(value.toByte())
|
||||||
i += 4
|
i += 4
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out.append(input[i])
|
val codePoint = Character.codePointAt(input, i)
|
||||||
i += 1
|
val charBytes = String(Character.toChars(codePoint)).toByteArray(Charsets.UTF_8)
|
||||||
|
for (b in charBytes) {
|
||||||
|
bytes.add(b)
|
||||||
|
}
|
||||||
|
i += Character.charCount(codePoint)
|
||||||
}
|
}
|
||||||
return out.toString()
|
|
||||||
|
return String(bytes.toByteArray(), Charsets.UTF_8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,6 @@ class BonjourEscapesTest {
|
||||||
fun decodeDecodesDecimalEscapes() {
|
fun decodeDecodesDecimalEscapes() {
|
||||||
assertEquals("Clawdis Gateway", BonjourEscapes.decode("Clawdis\\032Gateway"))
|
assertEquals("Clawdis Gateway", BonjourEscapes.decode("Clawdis\\032Gateway"))
|
||||||
assertEquals("A B", BonjourEscapes.decode("A\\032B"))
|
assertEquals("A B", BonjourEscapes.decode("A\\032B"))
|
||||||
|
assertEquals("Peter\u2019s Mac", BonjourEscapes.decode("Peter\\226\\128\\153s Mac"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue