diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index c7e322663320b71840890b513109b59ddf154159..d5e7e830e71e436096647447d9a63581e55f8c6b 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -1801,6 +1801,20 @@ bool smb_msg_is_utf8(const smbmsg_t* msg)
 	return msg->text_charset != NULL && stricmp(msg->text_charset, "utf-8") == 0;
 }
 
+bool smb_msg_is_ascii(const smbmsg_t* msg)
+{
+	for (int i = 0; i < msg->total_hfields; i++) {
+		switch (msg->hfield[i].type) {
+			case FIDOCTRL:
+				if (strncmp(msg->hfield_dat[i], "CHRS: ASCII", 11) == 0)
+					return true;
+		}
+	}
+	if (msg->ftn_charset != NULL && strncmp(msg->ftn_charset, "ASCII", 5) == 0)
+		return true;
+	return msg->text_charset != NULL && stricmp(msg->text_charset, "us-ascii") == 0;
+}
+
 uint16_t smb_voted_already(smb_t* smb, uint32_t msgnum, const char* name, enum smb_net_type net_type, void* net_addr)
 {
 	uint16_t votes = 0;
diff --git a/src/smblib/smblib.h b/src/smblib/smblib.h
index 572b78cafa0733582ddf5a08a447f428034afdda..8f262b97c71070ea2d58695cdfc50a04e900989f 100644
--- a/src/smblib/smblib.h
+++ b/src/smblib/smblib.h
@@ -177,6 +177,7 @@ SMBEXPORT uint32_t  smb_last_in_thread(smb_t*, smbmsg_t*);
 SMBEXPORT size_t    smb_idxreclen(smb_t*);
 SMBEXPORT uint32_t  smb_count_idx_records(smb_t*, uint16_t mask, uint16_t cmp);
 SMBEXPORT bool      smb_msg_is_utf8(const smbmsg_t*);
+SMBEXPORT bool      smb_msg_is_ascii(const smbmsg_t*);
 SMBEXPORT size_t    smb_msg_count(smb_t*, unsigned types);
 SMBEXPORT enum smb_msg_type smb_msg_type(smb_msg_attr_t);