Index: loader/shp2pgsql-core.c
===================================================================
--- loader/shp2pgsql-core.c	(revision 5448)
+++ loader/shp2pgsql-core.c	(working copy)
@@ -40,7 +40,7 @@
  * Internal functions
  */
 
-char *utf8(const char *fromcode, char *inputbuf);
+char *utf8(const SHPLOADERCONFIG *config, char *inputbuf);
 void vasbappend(stringbuffer_t *sb, char *fmt, ... );
 char *escape_copy_string(char *str);
 char *escape_insert_string(char *str);
@@ -77,7 +77,7 @@
 
 /* Return allocated string containing UTF8 string converted from encoding fromcode */
 char *
-utf8(const char *fromcode, char *inputbuf)
+utf8(const SHPLOADERCONFIG *config, char *inputbuf)
 {
 	iconv_t cd;
 	char *outputptr;
@@ -87,7 +87,7 @@
 
 	inbytesleft = strlen(inputbuf);
 
-	cd = iconv_open("UTF-8", fromcode);
+	cd = iconv_open(config->target_encoding, config->encoding);
 	if ( cd == ((iconv_t)(-1)) )
 		return NULL;
 
@@ -856,6 +856,7 @@
 	config->createindex = 0;
 	config->readshape = 1;
 	config->encoding = strdup(ENCODING_DEFAULT);
+	config->target_encoding = strdup(ICONV_POLICY_ERROR);
 	config->null_policy = POLICY_NULL_INSERT;
 	config->sr_id = -1;
 	config->hwgeom = 0;
@@ -1148,7 +1149,7 @@
 		if (state->config->encoding)
 		{
 			/* If we are converting from another encoding to UTF8, convert the field name to UTF8 */
-			utf8str = utf8(state->config->encoding, name);
+			utf8str = utf8(state->config, name);
 			if (!utf8str)
 			{
 				snprintf(state->message, SHPLOADERMSGLEN, "Unable to convert field name \"%s\" to UTF-8: iconv reports \"%s\"", name, strerror(errno));
@@ -1575,7 +1576,7 @@
 			if (state->config->encoding)
 			{
 				/* If we are converting from another encoding to UTF8, convert the field value to UTF8 */
-				utf8str = utf8(state->config->encoding, val);
+				utf8str = utf8(state->config, val);
 				if (!utf8str)
 				{
 					snprintf(state->message, SHPLOADERMSGLEN, "Unable to convert field value \"%s\" to UTF-8: iconv reports \"%s\"", val, strerror(errno));
Index: loader/shp2pgsql-core.h
===================================================================
--- loader/shp2pgsql-core.h	(revision 5448)
+++ loader/shp2pgsql-core.h	(working copy)
@@ -40,6 +40,14 @@
 
 
 /*
+ * Error policies for iconv
+ */
+
+#define ICONV_POLICY_ERROR      "UTF-8"
+#define ICONV_POLICY_IGNORE     "UTF-8//IGNORE"
+#define ICONV_POLICY_TRANSLIT   "UTF-8//TRANSLIT"
+
+/*
  * Error message handling
  */
 
@@ -71,7 +79,7 @@
 #define ENCODING_DEFAULT "WINDOWS-1252"
 
 /*
- * Structure to hold the loader configuration options 
+ * Structure to hold the loader configuration options
  */
 
 typedef struct shp_loader_config
@@ -86,7 +94,7 @@
 	char *schema;
 
 	/* geometry column name to use */
-	char *geom; 
+	char *geom;
 
 	/* the shape file (without the .shp extension) */
 	char *shp_file;
@@ -96,7 +104,7 @@
 
 	/* 0 = MULTIPOLYGON/MULTILINESTRING, 1 = force to POLYGON/LINESTRING */
 	int simple_geometries;
-	
+
 	/* 0 = geometry, 1 = geography */
 	int geography;
 
@@ -115,6 +123,9 @@
 	/* iconv encoding name */
 	char *encoding;
 
+	/* always UTF-8 but with different iconv error policies */
+	char *target_encoding;
+
 	/* how to handle nulls */
 	int null_policy;
 
@@ -128,7 +139,7 @@
 
 
 /*
- * Structure to holder the current loader state 
+ * Structure to holder the current loader state
  */
 
 typedef struct shp_loader_state
@@ -138,7 +149,7 @@
 
 	/* Shapefile handle */
 	SHPHandle hSHPHandle;
-	
+
 	/* Shapefile type */
 	int shpfiletype;
 
Index: loader/shp2pgsql-cli.c
===================================================================
--- loader/shp2pgsql-cli.c	(revision 5448)
+++ loader/shp2pgsql-cli.c	(working copy)
@@ -41,6 +41,8 @@
 	printf("  -S  Generate simple geometries instead of MULTI geometries.\n");
 	printf("  -W <encoding> Specify the character encoding of Shape's\n");
 	printf("     attribute column. (default : \"WINDOWS-1252\")\n");
+	printf("  -C (e|i|t) Character encoding error policy.\n");
+	printf("     (e: error, i: ignore, t: transliterate, default: error)\n");
 	printf("  -N <policy> NULL geometries handling policy (insert*,skip,abort)\n");
 	printf("  -n  Only import DBF file.\n");
 	printf("  -?  Display this help screen.\n");
@@ -132,6 +134,26 @@
 			config->encoding = optarg;
 			break;
 
+		case 'C':
+			switch (optarg[0])
+			{
+			case 'e':
+				config->target_encoding = ICONV_POLICY_ERROR;
+				break;
+
+			case 'i':
+				config->target_encoding = ICONV_POLICY_IGNORE;
+				break;
+
+			case 't':
+				config->target_encoding = ICONV_POLICY_TRANSLIT;
+				break;
+
+			default:
+				fprintf(stderr, "Unsupported character encoding error policy.\nValid options: error, ignore, transliterate\n");
+				exit(1);
+			}
+			break;
 		case 'N':
 			switch (optarg[0])
 			{

