diff --git a/docs/examples/sampleconv.c b/docs/examples/sampleconv.c
new file mode 100644
index 0000000..ed45851
--- /dev/null
+++ b/docs/examples/sampleconv.c
@@ -0,0 +1,94 @@
+/*****************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ */
+/*
+   This is a simple example showing how a program on a non-ASCII platform
+   would invoke callbacks to do its own codeset conversions instead of
+   using the built-in iconv functions in libcurl.
+
+   The IBM-1047 EBCDIC codeset is used for this example but the code
+   would be similar for other non-ASCII codesets.
+
+   Three callback functions are created below:
+        my_conv_from_ascii_to_ebcdic,
+        my_conv_from_ebcdic_to_ascii, and
+        my_conv_from_utf8_to_ebcdic
+
+   The "platform_xxx" calls represent platform-specific conversion routines.
+
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length)
+{
+    char *tempptrin, *tempptrout;
+    size_t bytes = length;
+    int rc;
+    tempptrin = tempptrout = buffer;
+    rc = platform_a2e(&tempptrin, &bytes, &tempptrout, &bytes);
+    if (rc == PLATFORM_CONV_OK) {
+      return(CURLE_OK);
+    } else {
+      return(CURLE_CONV_FAILED);
+    }
+}
+
+CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length)
+{
+    char *tempptrin, *tempptrout;
+    size_t bytes = length;
+    int rc;
+    tempptrin = tempptrout = buffer;
+    rc = platform_e2a(&tempptrin, &bytes, &tempptrout, &bytes);
+    if (rc == PLATFORM_CONV_OK) {
+      return(CURLE_OK);
+    } else {
+      return(CURLE_CONV_FAILED);
+    }
+}
+
+CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length)
+{
+    char *tempptrin, *tempptrout;
+    size_t bytes = length;
+    int rc;
+    tempptrin = tempptrout = buffer;
+    rc = platform_u2e(&tempptrin, &bytes, &tempptrout, &bytes);
+    if (rc == PLATFORM_CONV_OK) {
+      return(CURLE_OK);
+    } else {
+      return(CURLE_CONV_FAILED);
+    }
+}
+
+int main(void)
+{
+  CURL *curl;
+  CURLcode res;
+
+  curl = curl_easy_init();
+  if(curl) {
+    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+    /* use platform-specific functions for codeset conversions */
+    curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+                     my_conv_from_ascii_to_ebcdic);
+    curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION,
+                     my_conv_from_ebcdic_to_ascii);
+    curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION,
+                     my_conv_from_utf8_to_ebcdic);
+
+    res = curl_easy_perform(curl);
+
+    /* always cleanup */
+    curl_easy_cleanup(curl);
+  }
+  return 0;
+}
