1928年,伪满洲国的日本翻译伊丹英彦(仲村亨)离开中国情人丁慧(章子怡)返回日本,数年后他再回中国来到上海时,变身高级特务。而此时丁慧已成为地下抗日组织的成员,并与该组织首领谢明(冯远征)相爱。抗日组织去火车站接从外地聘请的暗杀日本情报人员山本的杀手时,误认其为小职员司徒(刘烨),混乱中,丁慧杀死司徒女友依玲(李冰冰),司徒则被伊丹英彦抓获。
对一系列遭遇无比迷惑的司徒被释放后,发誓要为依玲报仇。丁慧与伊丹英彦重逢,成为两股势力互相设局要利用的重要棋子,她本人正为误杀无辜饱受内心折磨。某个日本会所举办的舞会上,伊丹英彦告诉丁慧山本与谢明均已死,丁慧震惊想刺杀伊丹英彦之际,司徒持枪闯进舞会。。明治中期,长崎游廓不减当年繁荣,各层次的艺妓仍是富人心仪和追求的对象,而两大花魁菖蒲太夫(亲王冢贵子 饰)与扬羽太夫(川口小枝 饰)则为其中翘楚。然即使身为花魁,却也要为了钱财接待一些猥亵、无趣的客人。菖蒲深爱贩卖草纸的年轻人喜助(真柴さとし 饰),碍于身份只能偷偷幽会。
另一方面,刺青师清吉(伊藤高 饰)四处寻找能令他满足的完美肌肤,为此不惜将妓女迷晕。在浴场,清吉无意间看到菖蒲的细腻肌肤,顿时为之绝倒。但他粗鲁的举动遭到菖蒲拒绝,在扬羽的劝说之下,菖蒲主动回到清吉面前……。