diff --git a/lib/defs.js b/lib/defs.js
index f920866..71d8263 100644
--- a/lib/defs.js
+++ b/lib/defs.js
@@ -506,11 +506,10 @@ filters.message = {
 			return value;
 		}
 		var message = typeof value === 'string' ? value : value.message;
-		if (typeof message === 'string') {
-			var encoding = encodings.detect(message);
+		if (typeof message === 'string' && message) {
+			var encoded = false;
 			if (value.udh) {
 				var udhList = udhCoder.getUdh(value.udh);
-				var encoded = false;
 				for (var i = 0; i < udhList.length; i++) {
 					var udh = udhList[i];
 					if (udh[0] === 0x24 || udh[0] === 0x25) {
@@ -520,15 +519,19 @@ filters.message = {
 						break;
 					}
 				}
-				if (!encoded) {
-					if (message && this.data_coding === null) {
-						this.data_coding = consts.ENCODING[encoding];
-					}
-					message = encodings[encoding].encode(message);
-				}
-			} else {
-				if (message && this.data_coding === null) {
+			}
+			if (!encoded) {
+				var encoding = encodings.default;
+				if (this.data_coding === null) {
+					encoding = encodings.detect(message);
 					this.data_coding = consts.ENCODING[encoding];
+				} else if (this.data_coding !== consts.ENCODING.SMSC_DEFAULT) {
+					for (var key in consts.ENCODING) {
+						if (consts.ENCODING[key] === this.data_coding) {
+							encoding = key;
+							break;
+						}
+					}
 				}
 				message = encodings[encoding].encode(message);
 			}