diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml
new file mode 100644
index 22815bc..be0d602
*** a/doc/src/sgml/libpq.sgml
--- b/doc/src/sgml/libpq.sgml
*************** int PQclientEncoding(const PGconn *<repl
*** 5377,5383 ****
  </synopsis>
  
        Note that it returns the encoding ID, not a symbolic string
!       such as <literal>EUC_JP</literal>. To convert an encoding ID to an encoding name, you
        can use:
  
  <synopsis>
--- 5377,5384 ----
  </synopsis>
  
        Note that it returns the encoding ID, not a symbolic string
!       such as <literal>EUC_JP</literal>. If unsuccessful, it returns -1.
!       To convert an encoding ID to an encoding name, you
        can use:
  
  <synopsis>
diff --git a/src/backend/utils/mb/wchar.c b/src/backend/utils/mb/wchar.c
new file mode 100644
index 6d03a10..5f65f1b
*** a/src/backend/utils/mb/wchar.c
--- b/src/backend/utils/mb/wchar.c
*************** pg_mic_mblen(const unsigned char *mbstr)
*** 1778,1787 ****
  int
  pg_encoding_mblen(int encoding, const char *mbstr)
  {
! 	Assert(PG_VALID_ENCODING(encoding));
! 
! 	return ((encoding >= 0 &&
! 			 encoding < sizeof(pg_wchar_table) / sizeof(pg_wchar_tbl)) ?
  		((*pg_wchar_table[encoding].mblen) ((const unsigned char *) mbstr)) :
  	((*pg_wchar_table[PG_SQL_ASCII].mblen) ((const unsigned char *) mbstr)));
  }
--- 1778,1784 ----
  int
  pg_encoding_mblen(int encoding, const char *mbstr)
  {
! 	return (PG_VALID_ENCODING(encoding) ?
  		((*pg_wchar_table[encoding].mblen) ((const unsigned char *) mbstr)) :
  	((*pg_wchar_table[PG_SQL_ASCII].mblen) ((const unsigned char *) mbstr)));
  }
*************** pg_encoding_mblen(int encoding, const ch
*** 1792,1801 ****
  int
  pg_encoding_dsplen(int encoding, const char *mbstr)
  {
! 	Assert(PG_VALID_ENCODING(encoding));
! 
! 	return ((encoding >= 0 &&
! 			 encoding < sizeof(pg_wchar_table) / sizeof(pg_wchar_tbl)) ?
  	   ((*pg_wchar_table[encoding].dsplen) ((const unsigned char *) mbstr)) :
  	((*pg_wchar_table[PG_SQL_ASCII].dsplen) ((const unsigned char *) mbstr)));
  }
--- 1789,1795 ----
  int
  pg_encoding_dsplen(int encoding, const char *mbstr)
  {
! 	return (PG_VALID_ENCODING(encoding) ?
  	   ((*pg_wchar_table[encoding].dsplen) ((const unsigned char *) mbstr)) :
  	((*pg_wchar_table[PG_SQL_ASCII].dsplen) ((const unsigned char *) mbstr)));
  }
*************** pg_encoding_dsplen(int encoding, const c
*** 1808,1819 ****
  int
  pg_encoding_verifymb(int encoding, const char *mbstr, int len)
  {
! 	Assert(PG_VALID_ENCODING(encoding));
! 
! 	return ((encoding >= 0 &&
! 			 encoding < sizeof(pg_wchar_table) / sizeof(pg_wchar_tbl)) ?
! 			((*pg_wchar_table[encoding].mbverify) ((const unsigned char *) mbstr, len)) :
! 			((*pg_wchar_table[PG_SQL_ASCII].mbverify) ((const unsigned char *) mbstr, len)));
  }
  
  /*
--- 1802,1810 ----
  int
  pg_encoding_verifymb(int encoding, const char *mbstr, int len)
  {
! 	return (PG_VALID_ENCODING(encoding) ?
! 		((*pg_wchar_table[encoding].mbverify) ((const unsigned char *) mbstr, len)) :
! 	((*pg_wchar_table[PG_SQL_ASCII].mbverify) ((const unsigned char *) mbstr, len)));
  }
  
  /*
