diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index f3db3f0..7405e17 100644 *** a/src/backend/utils/adt/xml.c --- b/src/backend/utils/adt/xml.c *************** xpath_internal(text *xpath_expr_text, xm *** 3665,3670 **** --- 3665,3671 ---- int32 len; int32 xpath_len; xmlChar *string; + const char *string_encoding; xmlChar *xpath_expr; int i; int ndim; *************** xpath_internal(text *xpath_expr_text, xm *** 3717,3722 **** --- 3718,3728 ---- ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), errmsg("empty XPath expression"))); + + if (GetDatabaseEncoding() == PG_UTF8) + string_encoding = "UTF-8"; + else + string_encoding = "ASCII"; string = (xmlChar *) palloc((len + 1) * sizeof(xmlChar)); memcpy(string, datastr, len); *************** xpath_internal(text *xpath_expr_text, xm *** 3740,3746 **** if (ctxt == NULL || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, "could not allocate parser context"); ! doc = xmlCtxtReadMemory(ctxt, (char *) string, len, NULL, NULL, 0); if (doc == NULL || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_XML_DOCUMENT, "could not parse XML document"); --- 3746,3753 ---- if (ctxt == NULL || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, "could not allocate parser context"); ! doc = xmlCtxtReadMemory(ctxt, (char *) string, len, NULL, ! string_encoding, 0); if (doc == NULL || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_XML_DOCUMENT, "could not parse XML document");