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");
