Issue #4051: Prevent conflict of UNICODE macros in cPickle.
diff --git a/Misc/NEWS b/Misc/NEWS
index 6fed1bc..f286561 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -286,6 +286,8 @@
 Extension Modules
 -----------------
 
+- Issue #4051: Prevent conflict of UNICODE macros in cPickle.
+
 - Issue #4228: Pack negative values the same way as 2.4 in struct's L format.
 
 - Issue #1040026: Fix os.times result on systems where HZ is incorrect.
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 18baee1..7f836c3 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -18,6 +18,14 @@
 #define HIGHEST_PROTOCOL 2
 
 /*
+ * Note: The UNICODE macro controls the TCHAR meaning of the win32 API. Since
+ * all headers have already been included here, we can safely redefine it.
+ */
+#ifdef UNICODE
+#  undef UNICODE
+#endif
+
+/*
  * Pickle opcodes.  These must be kept in synch with pickle.py.  Extensive
  * docs are in pickletools.py.
  */