diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c
index edc8350e3331549aa623c5fde5f8d349a31eab30..6ff88eefc122b3832ca3624b5f63676fd4dfa34a 100644
--- a/dlls/jscript/global.c
+++ b/dlls/jscript/global.c
@@ -899,8 +899,7 @@ static HRESULT JSGlobal_encodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
             size = WideCharToMultiByte(CP_UTF8, 0, ptr, 1, NULL, 0, NULL, NULL);
             if(!size) {
                 SysFreeString(str);
-                FIXME("throw Error\n");
-                return E_FAIL;
+                return throw_uri_error(ctx, ei, JS_E_INVALID_URI_CHAR, NULL);
             }
             len += size*3;
         }
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 09c3360e51d805c072489afee3d9dbe6e3c21fa6..2416ea0f907cfcfe257f6c25f83e69e32257dfdc 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -2053,6 +2053,7 @@ testException(function() {RegExp(/a/, "g");}, "E_REGEXP_SYNTAX_ERROR");
 
 // URIError tests
 testException(function() {encodeURI('\udcaa');}, "E_URI_INVALID_CHAR");
+testException(function() {encodeURIComponent('\udcaa');}, "E_URI_INVALID_CHAR");
 
 function testThisExcept(func, e) {
     testException(function() {func.call(new Object())}, e);