@jpinner makes sense.. I want to cut 3.5.4.Final tomorrow. Would be nice if you could "fix it" before that..

Encode URI using UTF-8 charset
Starting with IE7, all URLs are encoded using the UTF-8 character set (http://support.microsoft.com/kb/934279).

Netty assumes that the request uri string is encoded as ASCII -- see HttpRequestEncoder: buf.writeBytes(request.getUri().getBytes("ASCII"))

Requests that are generated by HttpMessageDecoder use StringBuilder to generate the URI and so will not preserve UTF-8 characters when encoded using HttpRequestEncoder.

Since UTF-8 is a strict superset of ASCII, we should be able to encode the URI using UTF-8 without breaking any requests whose URI only contains ASCII characters.

src/main/java/org/jboss/netty/handler/codec/http/HttpRequestEncoder.java
src/main/java/org/jboss/netty/handler/codec/http/HttpRequestEncoder.java
diff --git a/src/main/java/org/jboss/netty/handler/codec/http/HttpRequestEncoder.java b/src/main/java/org/jboss/netty/handler/codec/http/HttpRequestEncoder.java
index 43d4167af6e..6da12766335 100644
--- a/src/main/java/org/jboss/netty/handler/codec/http/HttpRequestEncoder.java
+++ b/src/main/java/org/jboss/netty/handler/codec/http/HttpRequestEncoder.java
@@ -37,7 +37,7 @@ protected void encodeInitialLine(ChannelBuffer buf, HttpMessage message) throws
         HttpRequest request = (HttpRequest) message;
         buf.writeBytes(request.getMethod().toString().getBytes("ASCII"));
         buf.writeByte(SP);
-        buf.writeBytes(request.getUri().getBytes("ASCII"));
+        buf.writeBytes(request.getUri().getBytes("UTF-8"));
         buf.writeByte(SP);
         buf.writeBytes(request.getProtocolVersion().toString().getBytes("ASCII"));
         buf.writeByte(CR);
