You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by yo...@apache.org on 2006/08/06 17:29:03 UTC
svn commit: r429137 -
/incubator/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java
Author: yonik
Date: Sun Aug 6 08:29:03 2006
New Revision: 429137
URL: http://svn.apache.org/viewvc?rev=429137&view=rev
Log:
json:escape chars<=0x1f, python:encode tab
Modified:
incubator/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java
Modified: incubator/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java
URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java?rev=429137&r1=429136&r2=429137&view=diff
==============================================================================
--- incubator/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java (original)
+++ incubator/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java Sun Aug 6 08:29:03 2006
@@ -384,6 +384,15 @@
// it might be more efficient to use a stringbuilder or write substrings
// if writing chars to the stream is slow.
if (needsEscaping) {
+
+
+ /* http://www.ietf.org/internet-drafts/draft-crockford-jsonorg-json-04.txt
+ All Unicode characters may be placed within
+ the quotation marks except for the characters which must be
+ escaped: quotation mark, reverse solidus, and the control
+ characters (U+0000 through U+001F).
+ */
+
for (int i=0; i<val.length(); i++) {
char ch = val.charAt(i);
switch(ch) {
@@ -392,15 +401,19 @@
writer.write('\\');
writer.write(ch);
break;
- /*** the following are not required to be escaped
- case '\r':
- case '\n':
- case '\t':
- case '\b':
- case '\f':
- case '/':
- ***/
- default: writer.write(ch);
+ case '\r': writer.write("\\r"); break;
+ case '\n': writer.write("\\n"); break;
+ case '\t': writer.write("\\t"); break;
+ case '\b': writer.write("\\b"); break;
+ case '\f': writer.write("\\f"); break;
+ // case '/':
+ default: {
+ if (ch <= 0x1F) {
+ unicodeEscape(writer,ch);
+ } else {
+ writer.write(ch);
+ }
+ }
}
}
} else {
@@ -608,17 +621,18 @@
case '\\': sb.append('\\'); sb.append(ch); break;
case '\r': sb.append("\\r"); break;
case '\n': sb.append("\\n"); break;
- default:
- // we don't strictly have to escape these chars, but it will probably increase
- // portability to stick to visible ascii
- if (ch<' ' || ch>127) {
- unicodeEscape(sb, ch);
- needUnicode=true;
- } else {
- sb.append(ch);
- }
- }
+ case '\t': sb.append("\\t"); break;
+ default:
+ // we don't strictly have to escape these chars, but it will probably increase
+ // portability to stick to visible ascii
+ if (ch<' ' || ch>127) {
+ unicodeEscape(sb, ch);
+ needUnicode=true;
+ } else {
+ sb.append(ch);
+ }
}
+ }
writer.write( needUnicode ? "u'" : "'");
writer.append(sb);