Yes, this is really not a ColdFusion bug. This is a common problem.
This is mainly a mistake of the original CGI specification, which indicates that PATH_INFO should be% -decoded, thus losing the original sequence of %xx bytes, which would allow you to determine what real characters were intended.
And this is partly an IIS error because it always tries to read the %xx bytes represented in the path part as UTF-8 encoded Unicode (unless the path is a valid UTF-8 byte sequence, in which case it plumps for the Windows codepage by default, but does not give you the opportunity to find out what happened). Having done this, it places it in the environment variables as a Unicode string (since envvars are Unicode on Windows).
However, most byte tools that use C stdio (and I assume this applies to ColdFusion, as happens in Perl, Python 2, PHP, etc.), try reading the environment variables as bytes, and MS C encodes again Unicode content using the default Windows codepage. Therefore, any characters that do not match the default code page are lost forever. This will include your Arabic characters when launched in a western Windows installation.
A smart script that has direct access to the Win32 API GetEnvironmentVariableW can call this to get the native-Unicode environment variable, which they can then encode in UTF-8 or something else they wanted, assuming the input was also UTF- 8 (this is what you usually wanted today). However, I do not think that CodeFusion gives you this access, and in any case, it only works with IIS6; IIS5.x will throw out any non-default characters before they reach the environment variables.
Otherwise, itโs best to rewrite the URL. If the layer above CF can convert this search.cfm/ุงููุงูุฑุฉ to search.cfm/?q=ุงููุงูุฑุฉ , then you do not face the same problem, because the variable QUERY_STRING , unlike PATH_INFO , is not specified as a% code, so %xx bytes remain where the instrument at the CF level can see them.