From d89b18613f26094eee45d664cc2a8e5fc9fcba16 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 6 May 2013 14:33:00 -0400 Subject: [PATCH] Polish (minor) --- .../web/socket/sockjs/SockJsFrame.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsFrame.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsFrame.java index 17233f7e0e9..c1a52ef37dc 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsFrame.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsFrame.java @@ -78,24 +78,29 @@ public class SockJsFrame { return this.content.getBytes(Charset.forName("UTF-8")); } - public static String escapeCharacters(char[] chars) { + /** + * See "JSON Unicode Encoding" section of SockJS protocol. + */ + public static String escapeCharacters(char[] characters) { StringBuilder result = new StringBuilder(); - for (char ch : chars) { - if (isSockJsEscapeCharacter(ch)) { + for (char c : characters) { + if (isSockJsEscapeCharacter(c)) { result.append('\\').append('u'); - String hex = Integer.toHexString(ch).toLowerCase(); + String hex = Integer.toHexString(c).toLowerCase(); for (int i = 0; i < (4 - hex.length()); i++) { result.append('0'); } result.append(hex); } else { - result.append(ch); + result.append(c); } } return result.toString(); } + // See `escapable_by_server` var in SockJS protocol (under "JSON Unicode Encoding") + private static boolean isSockJsEscapeCharacter(char ch) { return (ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u200C' && ch <= '\u200F') || (ch >= '\u2028' && ch <= '\u202F') || (ch >= '\u2060' && ch <= '\u206F')